3

私は教訓的な目的のためだけに DynamoDB を学ぼうとしています。そのため、NoSQL データベースを学び、経験を積むために、車両 (車、自転車、四輪バイクなど) を販売する小さなプロジェクトを作成することを提案しています。適切なモデルの作成に関する多くのドキュメントを読みましたが、データを保存する最善の方法がまだわかりません。

次のようなフィルターですべての車両を取得したい:

  • 3か月以内のすべての車を入手してください。
  • ブランド、年式、モデル別に 3 か月以内のすべての車を取得します。
  • バイク、クワッド バイクなどの前の同じクエリも同様です。

公式ドキュメントと例のある他のページを読んだ後 ( https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html#bp-general-nosql-design-approachhttps ://medium.com/swlh/data-modeling-in-aws-dynamodb-dcec6798e955別のテーブル vs マップ リスト - DynamoDB )、最高の設計ではすべてを格納するために 1 つのテーブルのみを使用すると彼らは言ったので、最終的には以下のようなモデル:

-------------------------------------------------------------------------------------
Partition key |          Sort key     | Specific attributes for each type of vehicle
-------------------------------------------------------------------------------------
    cars      | date#brand#year#model | {main attributes for the car}
    bikes     | date#brand#year#model | {main attributes for the bike}
-------------------------------------------------------------------------------------

データを検索するための良い方法であると指定されているため、複合ソートキーを使用しました ( https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html )。

しかし、私のモデルを定義した後、以前のモデルには「ホットスポッティング」または「ホイキー」と呼ばれる問題があることがわかりました。( https://medium.com/expedia-group-tech/dynamodb-data-modeling-c4b02729ac08https://dzone.com/articles/partitioning-behavior-of-dynamodb )公式ドキュメントではパーティションの使用を推奨しているため問題を回避するために、カーディナリティの高いキーを使用してください。

そのため、この時点で、優れたスケーラブルなモデルを定義する方法について少し行き詰まっています。上記のクエリを取得するためのモデルを実現する方法について、いくつかの助けや例を教えていただけますか?

注: 車両ごとに特定のテーブルを作成することも検討しましたが、情報を見つけるために完全なテーブル スキャンを実行する必要があるため、より多くの問題が発生します。

4

1 に答える 1