【初心者にやさしい】データベース・データウェアハウス・データレイクをしっかりと区別してみる

# 本記事の目的
　業務において、「__定期的にクライアント企業様から送られてくるローデータをデータウェアハウスに流し込む__」という定期作業を行うことになり、それに伴って、 __データベース関連の知識が必要__ になったため、1ヶ月ほどかけてざっと学習しました。
　今回はそこで得た知識を共有することを目的とします。

# 本記事の内容
　本記事では、「__そもそもデータベースにはどのような種類があるのか__」ということを整理していくとともに、データベースの形態が変化していった経緯にも迫ってみたいと思います。

# データベースの種類
　データベースの種類には、現在大きく分けて３つの種類があると言うことができます。
「__データベース__」、「__データウェアハウス__」、「__データレイク__」の３つです。利用者側は自分達の利用目的に応じてどれを使うのかを選択していくわけですが、それぞれの違いというものを以降で確認したいと思います。
　ただ、一度に３つの違いを確認するのは少々骨が折れるので、まずは __よく使われるデータベースとデータウェアハウスの違いを確認__ していこうと思います。

# データベースとデータウェアハウスの違い
　まず、データベースとは、「__データを蓄積していく基地__」のことを言います。データを蓄積していく基地という意味では、データウェアハウスも同じものなので、前提として、「__概念的にはデータウェアハウスはデータベースに含まれる__」と言うことができます。
![データベースとデータウェアハウスの違いとは.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2375287/a5cf1333-846e-5949-37e1-d22e85e15a61.png)
　しかし、 __利用目的や特性に応じて__ 「データベース」と呼ぶか、「データウェアハウス」と呼ぶかを区別している感じです。それぞれを区別するためのいくつかの基準も存在するので、それらの基準をもとに区別してみたいと思います。

## ①データ処理方法による違い
　__データに対してどのような処理を求めるのか__ によって、「データベース」なのか「データウェアハウス」なのかを区別することができます。

### 大量アクセス処理ならデータベース
　大量アクセス処理とは、 __OLTP（Online Transaction Processing）__ という考えに基づいた処理方法であり、 __日々増えてくデータを確実に登録し、小さいサイズのデータ取得依頼に対し迅速に応えることに特化している__ という特徴や、 __大量に発生する読書きアクセスに対して同時で実行することに特化している__ などの特徴を持つ。
　つまり、「__登録されているデータに対するデータ取得などのアクセスに対して強い__」と言うことができます。

　一般的なECサイトやソーシャルゲーム、社内システムなどに用いられる場合が多く、具体的なサービスとしては「__Oracle DB__」、「__MySQL__」などがある。

　👉[Oracle公式](https://www.oracle.com/jp/database/technologies/)
　👉[MySQL公式](https://www.mysql.com/jp/)

### 大量データ処理なら「データウェアハウス」
　大量データ処理とは、 __OLAP（Online Analytical Processing）__ という考えに基づいた処理方法であり、__大量に蓄積されたデータを分析することに特化している__ という特徴を持つ。 通常膨大なデータ量を扱って分析するにはそれ相応の施設が必要だが、最近では __クラウド__ で従量課金制を取り入れながら提供されているサービスがほとんど。

　具体的なサービスとしては、「__Amazon Redshift__」、「__BigQuery__」、「__Azure Synapse Analytics__」、「__Treasure Data__」など。

　👉[AWS Amazon RedShift公式](https://aws.amazon.com/jp/redshift/)
　👉[Google BigQuery公式](https://cloud.google.com/bigquery?hl=ja)
　👉[MicroSoft zure Synapse Analytics公式](https://azure.microsoft.com/ja-jp/services/stream-analytics/)
　👉[Treasure Data公式](https://www.treasuredata.com/)

## ②利用シーンによる違い
　データ処理方法が違えば、当然利用シーンも異なってきます。

### 日常的で同時アクセス処理が必要な場合の利用なら「データベース」
　日常的にデータの保存、取得、更新、削除などが必要となっており、かつ大量の読み書きアクセスが想定される場合はデータベースの利用が望ましいでしょう。

　(例)病院が新しい患者のデータを入力する。
　(例)顧客がオンラインウェブサイトでチケットを購入する。
　(例)顧客がネット予約で予約した内容を変更する。

### 大量のデータを使って分析するための利用なら「データウェアハウス」
　多くの媒体からのデータ収集が必要であり、過去、現在、未来の問題を考えるといったより大規模で高度な分析を必要とする場合にはデータウェアハウスの利用が望ましいでしょう。

　(例)数多くのSNSを利用したアンケートの結果を収集し、分析をする。
 　→ __ちなみに私が今携わっている業務はまさにこれに似た業務です！！__

## ③求められるサービスレベルによる違い
　利用シーンが違えば、それぞれに求められるサービスレベルも違ってきます。

### データベースにはほぼ24時間の稼働が必要
　日常的な処理が必要ということからも分かる通り、データベースは24時間しっかりと稼働していることが重要です。 __少しのダウンタイムがあるだけでも、大きなリスクになることがあリます。__

### データウェアハウスにはダウンタイムがあっても大丈夫
　「データの分析のための利用」ということからも分かる通り、ダウンタイムはそれほど大きな問題ではありません。実際、ほとんどのデータウェアハウスでは、より多くの情報がアップロードされる時、定期的にダウンするように設定されているようです。

## ④提供されている機能による違い
　「データ処理方法」や「利用目的」の違いからも分かる通り、当然搭載される機能も違ってきます。

### データベースは「CRUD操作」のための機能が充実
　データベースは __CRUD操作（作成、読み込み、更新、削除）が軽快に行えるように最適化__ されている一方で、 __より複雑な分析クエリを実行すると、その性能は急速に低下してしまう__ という点もあります。
　
### データウェアハウスは「複雑な分析クエリ」のための機能が充実
　データウェアハウスは処理速度よりも、 __複雑な分析クエリへの対応力__ という点を重視しています。

## ⑤データ構造による違い

### データベースは「正規化」が特徴
　データベースでは、高速なクエリ操作が重要なため、「__データの正規化__」が行われた状態で保管されています。これにより処理速度の向上につながり、レスポンスタイムが削減されるというメリットがあります。

### データウェアハウスは「非正規化」が特徴
　データウェアハウスでは、クエリのスピードは重要ではなく、あくまで「__分析__」に特化していることが重要です。重複データなどを気にする必要はなく、「__非正規化__」の状態でデータが格納されているのが一般的。分析のための読み取り動作を優先させるくらいです。

　以上の違いを表にまとめると以下のようになります。結構区別できるものですね。
![データベースとデータウェアハウス図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2375287/bad11f8f-2ca9-e1b6-86e3-3304c8cab39c.png)

# データレイクとは
　データベースとデータウェアハウスの違いがある程度分かったところで、データレイクとは何なのかを確認していくことにしましょう。
　
　データウェアハウスは「__分析に特化している__」という特徴を持つが、その __分析に使用したいデータには様々な形式のモノがあります__ 。そういったデータを詰め込んでおく場所、つまり __画像ファイルや音声ファイル、テキストファイルなど、様々なデータを一か所で大量に保存しておくことができるデータ基地が必要__ ということになる。その役割を果たすのが __データレイク__ 。

　データウェアハウスに入っているデータは加工された「__構造化データ__」であるが、データレイクに入っているデータは加工されていない「__ローデータ__」である。

　__データレイクに入っているデータを必要に応じて加工し、データウェアハウスで管理するというやり方ができる。__

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2375287/4cf7611c-e7c9-e2e8-49ba-bfb1a75b8436.png)
「データレイクとは？DWHとの違いや活用事例を解説！」より引用
(https://www.it-comm.co.jp/media/what-is-a-data-lake#toc-3)

# データベース→データウェアハウス→データレイクと次々に登場してきた背景
　ここまで、データベースとデータウェアハウスとデータレイクの違いをある程度把握できたと思いますので、ここからは、 __なぜデータベース→データウェアハウス→データレイクと次々に登場してきたのか、その背景を順を追って確認__ して行きたいと思います。

## ①エクセルの限界
　元々データの管理といえば、「__エクセル__」でした。一番身近なデータ管理ツールでもあります。しかし、エクセルにも限界というものがあります。

+ 限界1. 大量のデータの処理が苦手
+ 限界2. 操作性が低い（行列の追加や削除操作など）
+ 限界3. データ型を指定できない(間違ったデータの混入の恐れ)

## ②データベースの活用
　エクセルの弱点を補うため、このデータベースを利用するという選択肢が生まれます。このデータベースは基本的にデータベースサーバーに存在します。エクセルの弱点を補う特徴として以下のようなものがあります。

+ 特徴1. 大量のデータも対応可能
+ 特徴2. SQLという言語を使ってコマンドで操作できるので自動化が期待できる
+ 特徴3. データの保存形式(データ型)を細かく設定できる

　その中でも特に多く使用されているのが __RDB(リレーショナルデータベース)__ であり、 __データをその種類ごとに別々のテーブルで管理し、互いに紐づけることで、大量のデータに対しても簡単に操作できるようになっています。__
![カード型とリレーショナルデータベース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2375287/e2653a05-8977-fadd-c3ee-d328d243832b.png)

## ③データベースからデータウェアハウスへ
　データベースの強みは、「__データの更新に応じたリアルタイムな結果反映__」です。
　例えば「__お店の予約サイト__」があったとして、お客様が予約を入れたら、結果をデータベースに登録すると同時に画面上に即時反映するなどの機能に長けているということになります。
　しかし、先ほどの違いの部分でも触れましたが、それがゆえに __大量のデータを扱うとなったら、時間のロスが生まれてしまう危険もあるのです。__

　それならば、 __更新の余地がないデータ部分に関しては、別の場所に溜めていき、「必要な時に表示する」という機能に特化させればよいのではないか__ 。そして __データの更新とリアルタイムに結果を反映する必要のあるデータのみをRDBで管理すればいいのではないか__ 。
　
　このような考えから、「__データウェアハウス__」が生まれたわけです。

　例えるならば、 __データベースはまだ編集の必要のある「エクセルファイル」__ で、 __データウェアハウスはもう編集の必要のない「PDFファイル」__ と言うことができます。データベースは即時反映のスピードを求められるがゆえに、大きなストレージが必要となるため、値段も高くなりやすいです。一方、データウェアハウスはそこまでスピードは求められないため、大容量でも安い値段で運用することができるという違いもあリます。
![データベースとデータウェアハウスの役割分担.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2375287/00392e1b-ac1f-c20c-2705-704579b31450.png)

## ④データレイクの登場
　次にデータレイクの登場ですが、この背景を分かりやすくお伝えするため、別の例を出させていただきます。
　
　例えばある日、太郎君がAという飲食店で食事をしました。そして太郎君はその日の夜にコンビニでビールとおつまみを買いました。この時太郎君はレシートを撮影していました。もし、このレシートの画像ファイルを「飲食店での注文記録」というデータのある場所で一緒に管理することができれば、よりよいマーケティングが行えるのではないかという考えになるはずです。

　このような考えをもとにして登場したのが「__データレイク__」というわけです。 __様々な形式のデータを一か所に溜めこんでおけるという特徴があり、しかもかなり大容量__ です。ここに溜まったデータの中から必要な分を抽出して分析するときにデータウェアハウスを使うといった使い分けになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2375287/4cf7611c-e7c9-e2e8-49ba-bfb1a75b8436.png)
「データレイクとは？DWHとの違いや活用事例を解説！」より引用
(https://www.it-comm.co.jp/media/what-is-a-data-lake#toc-3)

# まとめ
　今回は、データベース、データウェアハウス、データレイクについて、その違いを中心に解説しました。私自身今の業務を経験することがなかったとしたら、データサイエンティストを目指すでもない限り、これらの違いについて調べるなんてことはしなかったと思います。
　そういう意味でも、貴重な体験ができていると素直に受け止めています。皆さんのデータウェアハウス活用事例などもお聞きしてみたいですね。