データウェアハウス覚書
SQLプールは、データベース接続の再利用を可能にするための仕組みです。データベースへの接続は、通常リソースが多くかかる操作です。各クエリやトランザクションごとに新しい接続を確立すると、それがシステム全体でのパフォーマンス低下につながる可能性があります。
SQLプールの主な目的は以下のとおりです:
- リソースの効率的な使用: 一度確立された接続をプール内で再利用することで、接続確立に伴うオーバーヘッドを削減します。
- 応答性の向上: 既に確立された接続を再利用できるため、クエリ応答時間が短縮されます。
- システムのスケーラビリティ: 多数のユーザーまたはアプリケーションがデータベースにアクセスする場合、プールを介すことでシステムがスムーズに動作するようになります。
動作原理
- 接続要求: クライアント(通常はアプリケーション)がデータベースに接続を要求すると、プールはまず利用可能な(すなわち使用されていない)接続があるか確認します。
- 接続の再利用: 利用可能な接続があれば、その接続をクライアントに割り当てます。
- 新規接続の確立: 利用可能な接続がなければ、新たに接続を確立してクライアントに割り当てます。
- 接続の解放: クライアントが接続を閉じる要求をすると、接続は終了されるのではなく、プールに戻され再利用されます。
SQLプールは、多くのプログラミング言語やフレームワーク、データベース管理システム(DBMS)でサポートされています。AWS, Azure, GCPなどのクラウドサービスでも、データベース接続のプーリングオプションが提供されています。
データベースとデータウェアハウスは確かに似たような役割を果たすことがありますが、目的と使用ケースが異なります。そのため、設計哲学や最適化の方針も異なる場合が多いです。
データベース
- 目的: オンライントランザクション処理(OLTP)に主に使用され、高頻度での読み書きが発生します。
- 設計: 高度に正規化された設計が一般的で、トランザクションの整合性と効率性が重視されます。
- クエリ: 短いレスポンスタイムが要求されるため、インデックスの設計やキャッシュ戦略などが重要です。
データウェアハウス
- 目的: オンライン分析処理(OLAP)に主に使用され、大量のデータを集約して分析するためのものです。
- 設計: 「スター・スキーマ」や「スノーフレーク・スキーマ」など、分析しやすいように特別な設計がされます。
- クエリ: 分析クエリが主で、大量のデータを集約・スキャンすることが多い。したがって、I/Oの最適化や集約処理の効率化が重要です。
「とりあえず保存」という考え方は、データレイクと呼ばれる別のデータストレージの方に近いかもしれません。データウェアハウスは、データを意味のある形で整理、集約し、分析の効率を高めるよう設計されます。また、高頻度のクエリに対する最適化は一般的にOLTPシステムでよく見られ、OLAPシステムでも重要ですが、全体のパフォーマンスやストレージのコストも考慮する必要があります。
OLTP ソリューションは、データ レコードの作成、取得、更新、削除 (CRUD 操作と呼ばれることもあります) が行われるトランザクション ワークロードをサポートするために、データ ストレージが読み取りおよび書き込み操作の両方に対して最適化されているデータベース システムに依存しています。 これらの操作は、データベースの格納データの整合性を確保するように、トランザクション的に適用されます。
これを実現するために、OLTP システムでは、次のような、いわゆる ACID セマンティクスをサポートするトランザクションが適用されます。
分析データ処理では、通常、履歴データまたはビジネス メトリックの膨大な量を格納する読み取り専用 (または read-mostly) システムが使用されます。 分析は、特定の時点のデータのスナップショットまたは一連のスナップショットに基づいて行うことができます。
OLAP モデルは、分析ワークロード用に最適化された集計型のデータ ストレージです。 データ集計はさまざまなレベルのディメンションにまたがり、複数の階層レベルで集計を表示するために "ドリル アップまたはダウン" することができます。たとえば、地域別、市区町別、または個々の住所の合計売上を検索する場合などです。 OLAP データは事前に集計済みなので、それに含まれる概要を返すクエリをすばやく実行できます。
運用データと分析データ
''運用'' データは通常、アプリケーションによって生成および格納されるトランザクション データであり、多くの場合、リレーショナルまたは非リレーショナル データベース内にあります。 ''分析'' データは、多くの場合、データ ウェアハウス内の分析とレポート用に最適化されたデータです。
データ エンジニアの主な役割の 1 つは、運用および分析データ ソースを統合したり、複数のシステムから運用データを抽出し、分析に適した構造に変換して分析データ ストアに読み込んだりするソリューション (通常は ETL ソリューションと呼ばれる) を設計、実装、管理することです。
ストリーミングデータ
ストリーミング データとは、リアルタイムでデータ値を生成する永続的なデータ ソースを指し、多くの場合、特定のイベントに関連します。 ストリーミング データの一般的なソースには、モノのインターネット (IoT) デバイスとソーシャル メディア フィードがあります。
データ エンジニアは多くの場合、リアルタイムのデータ ストリームをキャプチャして分析データ システムに取り込むソリューションを実装する必要があります。多くの場合、リアルタイム データとバッチ処理される他のアプリケーション データを組み合わせます。
データ ストア
組織は通常、エンティティの詳細 (顧客や製品など)、特定のイベント (販売取引など)、その他の情報をドキュメント、画像、その他の形式で記録するために、構造化、半構造化、または非構造化形式でデータを格納します。 保存されたデータは、後で分析とレポートのために取得できます。
一般的に使用されるデータ ストアには、次の 2 つの大きなカテゴリがあります。
・ファイル ストア
・データベース