私はDynamoDBのにかなり新しいですし、現在我々はRDMSデータベースから以下の設定を適応したいDynamoDBのを使用してサーバレスアプリケーションに既存のプロジェクトを移行を考えている:DynamoDBのクエリ
テーブル:
- プロジェクト(PROJECTID)
- ファイル(FILEID、PROJECTID、ファイル名) 個の
- タグ(FILEID、タグ)
私たちは、1個のまたは複数のタグで(PROJECTIDによって)特定プロジェクトのためにすべてのファイルをフェッチするDynamoDBのでクエリを作成したい(タグにより、 )。 RDMSではこのクエリのようなものを持つ単純な次のようになります。現時点では
SELECT * FROM Files JOIN Tags ON Tags.FileID = Files.FileID WHERE Files.ProjectID = ?PROJECT AND Tags.Tag = ?TAG_1 OR ?TAG_2 ...
、我々は以下のDynamoDBのセットアップを持っている(それはまだ変更することができます):
- プロジェクト(PROJECTID [ハッシュキー]、...)
- ファイル(PROJECTID [ハッシュキー]、FILEID [RangeKey]、...)
また、プロジェクト耳鼻咽喉科の数と考えてください。 (1000〜30000の間に)巨大であり、各プロジェクトのファイル数も(50〜100.000です)、クエリは本当に速くなければなりません。
フィルタ式を使用せずにDynamoDB-queryを使用すると、データ選択後に適用されるので、これをどのように達成できますか?テーブルファイルが列としてStringSetタグを持つことはできますが、DynamoDBインデックスはString型でなければならないため、これを効率的なDynamoDBクエリ(DynamoDBスキャンを使用しないため)バイナリと数、StringSet型ではない?これはGlobal Secondary Index(GSI)の場合に該当するのでしょうか?