私はキャリア全体を非正規化リレーショナル データベースに費やしてきました。「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 であるアクセス パターン バリエーションは、かなりの差でより頻繁に使用されます。
解決策はすぐ目の前にあるような気がしますが、指を置くことはできません。