問題タブ [amazon-dynamodb-data-modeling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
29 参照

amazon-dynamodb - DynamoDB テーブルの設計: 「1 つの」アイテムすべてと、何らかの属性でソートされた「多くの」アイテムの 1 つが必要な 1 対多の関係をモデル化するにはどうすればよいですか?

私はキャリア全体を非正規化リレーショナル データベースに費やしてきました。「App Store」のような個人的なプロジェクトで特定のアクセス パターンをいくつか処理できる単一テーブルの設計を実装するために、そのすべてを学ぶのに苦労しています。

これが簡単なERDです。プラットフォーム (iOS、Android) とバンドル ID によって識別されるアプリ モデルと、新しいバージョンを作成するときに使用されるデフォルト マップがあります。各アプリには、バージョン番号 (一連の数値であり、アプリのコンテキスト内で一意) で識別される 0 から多数のバージョンを含めることができます。バージョンには、他のいくつかの属性 (名前、リリース ノート、バイナリ パスなど) と共に IsReleased 属性があります。

アクセスパターン

  1. すべてのアプリの最新バージョンを一覧表示します。
  2. 特定のプラットフォーム用のすべてのアプリの最新バージョンを一覧表示します。
  3. IsReleased が 1 であるすべてのアプリの最新バージョンをリストします。
  4. IsReleased が 1 である特定のプラットフォームのすべてのアプリの最新バージョンを一覧表示します。
  5. 特定のアプリの最新バージョンを取得します。
  6. IsReleased が 1 である特定のアプリの最新バージョンを取得します。
  7. 特定のアプリのすべてのバージョンを取得します。
  8. IsReleased が 1 である特定のアプリのすべてのバージョンを取得します。
  9. 特定のアプリのデフォルト属性を取得します。

1 から 4 に問題があります。このテーブルは私が向かった場所です。並べ替え順で 1 つのバージョンのすべてのアプリアイテムを提供する GSI を入手するのに苦労しています。

パック sk デフォルト アプリ名 バージョン 解放されます その他の属性
app_ios_com.app.one defaults { ... json ... }
app_ios_com.app.one version_1 アプリワン 1 1
app_ios_com.app.one version_2 アプリワン 2 1
app_ios_com.app.one version_3 アプリワン 3 1
app_ios_com.app.two defaults { ... json ... }
app_ios_com.app.two version_1 アプリ 2 1 1
app_ios_com.app.two version_2 アプリ 2 2 0
app_ios_com.app.two version_3 アプリ 2 3 0

たとえば、アクセス パターン 1 の場合、次のようにします。

パック sk デフォルト アプリ名 バージョン 解放されます その他の属性
app_ios_com.app.one version_3 アプリワン 3 1
app_ios_com.app.two version_3 アプリ 2 3 0

たとえば、アクセス パターン 3 の場合、次のようにします。

パック sk デフォルト アプリ名 バージョン 解放されます その他の属性
app_ios_com.app.one version_2 アプリワン 3 1
app_ios_com.app.two version_1 アプリ 2 1 1

覚えておく必要があるいくつかのデータ制約:

  • 現在、アプリは 10 ~ 20 個しかありませんが、数百個をサポートできるようにする必要があります
  • ほとんどのアプリには 100 から 200 のバージョンがあり、20 から 30 のリリース バージョンがあります。最大のアプリには 1000 のバージョンがあり、そのうち 50 がリリースされています。
  • バックエンドでは、IsReleased フラグは通常 0 から 1 に切り替えられますが、0 から 1 に切り替えられることもあります。
  • 平均バージョン アイテムは約 2 KB です。
  • IsReleased が 1 であるアクセス パターン バリエーションは、かなりの差でより頻繁に使用されます。

解決策はすぐ目の前にあるような気がしますが、指を置くことはできません。