問題タブ [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.
amazon-dynamodb - DynamoDB テーブルの設計: 「1 つの」アイテムすべてと、何らかの属性でソートされた「多くの」アイテムの 1 つが必要な 1 対多の関係をモデル化するにはどうすればよいですか?
私はキャリア全体を非正規化リレーショナル データベースに費やしてきました。「App Store」のような個人的なプロジェクトで特定のアクセス パターンをいくつか処理できる単一テーブルの設計を実装するために、そのすべてを学ぶのに苦労しています。
これが簡単なERDです。プラットフォーム (iOS、Android) とバンドル ID によって識別されるアプリ モデルと、新しいバージョンを作成するときに使用されるデフォルト マップがあります。各アプリには、バージョン番号 (一連の数値であり、アプリのコンテキスト内で一意) で識別される 0 から多数のバージョンを含めることができます。バージョンには、他のいくつかの属性 (名前、リリース ノート、バイナリ パスなど) と共に IsReleased 属性があります。
アクセスパターン
- すべてのアプリの最新バージョンを一覧表示します。
- 特定のプラットフォーム用のすべてのアプリの最新バージョンを一覧表示します。
- IsReleased が 1 であるすべてのアプリの最新バージョンをリストします。
- IsReleased が 1 である特定のプラットフォームのすべてのアプリの最新バージョンを一覧表示します。
- 特定のアプリの最新バージョンを取得します。
- IsReleased が 1 である特定のアプリの最新バージョンを取得します。
- 特定のアプリのすべてのバージョンを取得します。
- IsReleased が 1 である特定のアプリのすべてのバージョンを取得します。
- 特定のアプリのデフォルト属性を取得します。
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 であるアクセス パターン バリエーションは、かなりの差でより頻繁に使用されます。
解決策はすぐ目の前にあるような気がしますが、指を置くことはできません。