データモデリングは、アプリケーションが特定のデータベースにデータを格納する方法を設計するプロセスです。DynamoDB などの NoSQL データベースでは、データモデリングはリレーショナルデータベースを使用したモデリングとは異なります。リレーショナルデータベースは柔軟性のために構築されており、分析アプリケーションに最適です。リレーショナルデータモデリングでは、最初にエンティティから始めます。正規化されたリレーショナルモデルがある場合、アプリケーションで必要なクエリパターンを満たすことができます。
NoSQL (非リレーショナル) データベースは、柔軟性ではなく、速度とスケールのために設計されています。リレーショナルデータベースのパフォーマンスはスケールアップに伴って低下する可能性がありますが、DynamoDB などの水平スケーリングデータベースは、あらゆるスケールで一貫したパフォーマンスを実現します。一部の DynamoDB ユーザーには 100 TB を超えるテーブルがあり、テーブルの読み取りおよび書き込みパフォーマンスは、テーブルのサイズが 1 GB より小さい場合と同じです。
DynamoDB などの NoSQL データベースで最高の結果を達成するには、一般的なリレーショナルデータベースからの考え方の転換が必要です。DynamoDB を使用してデータをモデリングする場合は、次のベストプラクティスに従ってください。
1.アクセスパターンに焦点を当てる
種類を問わず、データモデリングを行う場合、アプリケーションのさまざまなオブジェクト (またはエンティティ) とそれらの接続方法 (またはエンティティ間のリレーションシップ) を説明するエンティティ関係図から始めます。
リレーショナルデータベースでは、エンティティを直接テーブルに配置し、外部キーを使用してリレーションシップを指定します。データテーブルを定義した後、リレーショナルデータベースは、必要な形状のデータを返すための柔軟なクエリ言語を提供します。
DynamoDB では、テーブルをモデル化する前にアクセスパターンについて検討します。NoSQL データベースは、柔軟性ではなく速度に重点を置いています。最初にデータへのアクセス方法を尋ね、次にアクセスする形状でデータをモデル化します。
DynamoDB テーブルを設計する前に、アプリケーションでデータを読み書きするために必要なものすべてを文書化します。アクセスパターンに合わせてテーブルを最適化することになるため、アプリケーションのすべてのフローを徹底的に検討してください。
2.DynamoDB へのリクエスト数を最適化する
アプリケーションのアクセスパターンのニーズを文書化したら、テーブルを設計できます。アクセスパターンごとに DynamoDB へのリクエストの数を最小限に抑えるようにテーブルを設計する必要があります。理想的には、ネットワークリクエストが遅いため、各アクセスパターンに必要な DynamoDB へのリクエストは 1 つだけである必要があります。これにより、アプリケーションで行うネットワークリクエストの数が制限されます。
DynamoDB へのリクエスト数を最適化するには、以下のコアコンセプトを理解する必要があります。
●プライマリキー
●セカンダリインデックス
●トランザクション
3.リレーショナルモデルを偽造しないでください
DynamoDB を初めて使用する人は、非リレーショナル DynamoDB の上にリレーショナルモデルを実装しようとすることがよくあります。これを行おうとすると、DynamoDB の利点のほとんどが失われてしまいます。
DynamoDB で試す最も一般的なアンチパターン (繰り返し発生する問題に対する効果のない応答) は次のとおりです。
- 正規化: リレーショナルデータベースでは、データを正規化してデータの冗長性とストレージスペースを削減し、ジョインを使用して複数の異なるテーブルを結合します。ただし、大規模なジョインは遅く、高価です。DynamoDB は、テーブルが大きくなるにつれて速度が低下するため、ジョインを許可しません。
- テーブルごとに 1 つのデータ型: 多くの場合、DynamoDB テーブルには単一のテーブルにさまざまなタイプのデータが含まれます。この例では、1 つのテーブルに User、Game、および UserGameMapping エンティティがあります。リレーショナルデータベースでは、これは 3 つの異なるテーブルとしてモデル化されます。
- セカンダリインデックスが多すぎる: ユーザーはよく、必要な追加のアクセスパターンごとにセカンダリインデックスを作成しようとします。DynamoDB はスキーマレスであり、これはインデックスにも適用されます。属性の柔軟性を使用して、テーブル内の複数のデータ型にかけて単一のセカンダリインデックスを再利用します。これはインデックスのオーバーロードと呼ばれます。
以下の手順では、エンティティ関係図を作成し、アクセスパターンを事前にマッピングします。DynamoDB を使用する場合、これらが常に最初のステップになります。次に、後続のモジュールで、このアクセスパターンをテーブルデザインに実装します。
モジュールの所要時間: 20 分