データに最適なデータ ストアを使用する
かつて多くの組織では、すべてのデータを大規模なリレーショナル SQL データベースに格納していました。 リレーショナル データベースは、リレーショナル データを含むトランザクションに対して、アトミック、一貫性、分離、持続性 (ACID) の保証を提供することに長けています。 ただし、これらのデータベースにはコストがかかります。
- クエリには、費用のかかる結合が必要になることがあります。
- データを正規化し、スキーマ オン ライトのために再構築する必要があります。
- ロックの競合がパフォーマンスに影響を与える可能性があります。
リレーショナル データベースの代替策
大規模なソリューションでは、1 つのデータ ストア テクノロジですべてのニーズが満たされることはおそらくありません。 リレーショナル データベースの代替策として、以下があります。
- キー/値のストア
- ドキュメント データベース
- 検索エンジンのデータベース
- タイム シリーズ データベース
- 列ファミリのデータベース
- グラフ データベース
それぞれ長所と短所があり、データの種類によって、より自然にフィットするデータストアのタイプも異なります。 データとその使用方法に最適なストレージ テクノロジを選びましょう。
たとえば、製品カタログを、柔軟なスキーマをサポートする Azure Cosmos DB などのドキュメント データベースに格納することが考えられます。 この場合、製品の説明はそれぞれ自己完結型ドキュメントです。 カタログ全体のクエリの場合は、カタログのインデックスを作成し、Azure Cognitive Search にインデックスを格納することがあります。 データが ACID 保証を必要とするため、製品一覧は SQL データベースに格納されます。
推奨事項
リレーショナル データベースをすべてに対して使用しない。 他のデータ ストアも、適切なときは検討する。 一般的なストレージ モデルについては、「データ ストア モデルについて」を参照してください。
データに含まれるのは、永続化されたアプリケーション データだけではないことに注意してください。 アプリケーション ログ、イベント、メッセージ、およびキャッシュも含まれています。
"多言語パーシステンス"、つまりさまざまなデータ ストア テクノロジを組み合わせて使用するソリューションを使用しましょう。
持っているデータの種類を考えてみましょう。 次に例を示します。
- トランザクション データを SQL データベースに入れる。
- JSON ドキュメントをドキュメント データベースに格納する。
- 時系列データ ベースをテレメトリに使用する。
- アプリケーション ログを Azure Cognitive Search に入れる。
- BLOB に Azure Blob Storage を選ぶ。
一貫性より可用性を優先する。 CAP 定理では、分散システムにおいては可用性と一貫性のトレードオフをしなければならないことが示されています。 完全に回避することができないネットワークの分断は、CAP 定理のもう 1 つの要素です。 しかし、最終的な一貫性モデルを採用することで、より高い可用性を得られることがよくあります。
あなたの開発チームのスキル セットを検討する。 多言語パーシステンスを利用することにはメリットがありますが、過度になることがあります。 新しいデータ ストレージ テクノロジを採用するには、新しいスキルのセットが必要です。 テクノロジを最大限に活用するために、開発チームが理解しなければならないのは以下を行う方法です。
- クエリを最適化します。
- パフォーマンスを調整します。
- 適切な使用パターンで作業します。
ストレージ テクノロジを選択するときは、次の要因を考慮してください。
補正トランザクションを使用する。 多言語パーシステンスの副作用は、1 つのトランザクションが複数のストアにデータを書き込む可能性があるということです。 何かが失敗した場合は、既に終了しているすべての手順を元に戻す補正トランザクションを使用します。
ドメイン駆動型設計の概念である “コンテキスト境界“ を調べる。 コンテキスト境界は、ドメイン モデルの周囲の明示的な境界です。 コンテキスト境界は、ドメインのどの部分にモデルが適用されるかを定義します。 コンテキスト境界がビジネス ドメインのサブドメインにマッピングされるのが理想です。 ご利用のシステムにおけるコンテキスト境界は、多言語パーシステンスを検討するのに適しています。 たとえば、products が Product Catalog サブドメインと Product Inventory サブドメインに出現することが考えられます。 しかし、ほとんどの場合、この 2 つのサブドメインは、商品の保管、更新、クエリについて異なる要件を持っています。