【コラム】DWHって何? & これからのDWHについて思うことを書いてみる
はじめに
これからと言うか
もうなっていると言うか
DWHをとりまく動きについて書いてみようと思います。
DWHとは
Data Ware House(データウェアハウス)。
そのまま訳すと「データの倉庫」ですね。
利用の範囲や用途は活用する状況によって様々かと思いますが、
概ね、「複数のシステムから時系列なデータを大量に保持・管理」する
ことを目的としていると思います。
RDBと違うの?
DWHも、oracleやMySQL等のRDB(Relational Database)も
「構造化されたデータを保持する」という意味では違いません。
どちらもデータベースです。
しかし、目的が異なります。
一般的に、RDBはシステムの一部としてデータを活用する際に使用されます。
レコード自体に意味があります。
例えば、WEBシステムで
「そのユーザが有料会員なのか無料会員なのか、
DBに登録されたステータスを判別して画面を出し分ける」ような用途で利用します。
生きた(リアルタイムの)データの活用と言えます。
一方、DWHは「レコード単体では意味をなさない」ことが多いです。
DWHはデータ分析での活用と言ったデータの集合としてはじめて意味をなします。
集合(データの過去の生きた軌跡)としてのデータの活用と言えます。
ここが大きな違いかと僕は認識しています。
また、DBの内部構造としては最近では以下のような違いがあります。
RDBは行志向DB
一般的なRDBは基本的には行志向です。
行のデータをひとまとまりにして取り出すときに効率的であるように設計された構造です。
以下のような特徴があります。
- データの追加は行単位
- 検索結果を複数の行として返却(selectすると複数行取得できますよね)
- 削除や更新の際には「特定の行」に対して更新や削除といった操作を行う。
レコード自体に意味があるようなケースでは最適と言えます。
DWHは列志向DB
列のデータをひとまとまりにして取り出すときに効率的であるように設計された構造です。
- 特定の列の値をまとめて処理することが非常に得意
- 大量なデータから特定の列の集合を取り扱うようなケースでは高速
逆に、行志向のような
特定の行を抽出、更新、削除したりするのは不得意です。
DWHの変遷
黎明期:オンプレのDWH
列志向DBはまだ本格的に台頭していなかったように思います。
OracleExaData等に代表される
大量データを複数サーバでの分散処理により高速に処理するDWH専用のRDB(行志向です)や、
Hadoop(Diskベース)/Spark(メモリベース)といった
分散の仕組みが登場し、隆盛を誇りました。
この頃は分散のためのサーバを物理的に賄う必要があり、コストが高かった印象です。
過渡期:クラウドのDWH
パブリッククラウドが普及し、GCPのBigqueryやAWSのredshiftなど列志向DBが台頭してきます。
コスト面が飛躍的に改善され、DWHとともにデータ分析も民主化されてきました。
今も隆盛を誇っていますよね。
各パブリッククラウドのマネージドサービスにがっつり囲い込まれた形でDWHを実現しています。
成熟期:これからのDWH
クラウドであることには変わりはありませんが、
パブリッククラウド依存の減衰がすすんでくると思います。
代表的な例として「snowflake」や「databricks」の台頭が挙げられます。
databricksはMLflowのOSS提供元としても知られています。
これらのSaaS型DWHサービスは、
パブリッククラウドのストレージ基盤(S3やGCS)や
コンピュートエンジンを利用しつつ、
Bigqueryやredshift等の
マネージドな列志向DBを使わない形でDWHの構築を実現します。
そのため、DWHのデータはそのままに、
基盤として利用するパブリッククラウドを移行する、
パブリッククラウド間を跨ぐ並列な利用といったことが可能になります。
パブリッククラウドへの依存を抑えた形での
DWHの構築が盛んになってくる(もうなってる)ように思います。
また、ストレージベースのDWHは
今までのクラウドDWHが得意とは言えなかった
非構造化データ(動画、画像、音声、センサーデータなど)の扱いにも光明が見える気がします。
おわりに
「snowflake」や「databricks」の詳細や
非構造化データの扱いについてはまた別の機会にでも書けたらなと思います。
Discussion