2017-03-08 13 views
0

私はDynamoDBのにかなり新しいですし、現在我々はRDMSデータベースから以下の設定を適応したいDynamoDBのを使用してサーバレスアプリケーションに既存のプロジェクトを移行を考えている:DynamoDBのクエリ

テーブル:

  • プロジェクト(PROJECTID
  • ファイル(FILEIDPROJECTID、ファイル名)
  • 個の
  • タグ(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)の場合に該当するのでしょうか?

答えて

1

ちょっと遅れて、別の質問からこの質問が参照されました。

私はあなたが行ってこのような何かを解決したと思いますか?

DynamoDBのテーブル

  • プロジェクト(PROJECTID [ハッシュキー]、...)
  • ファイル(PROJECTID [ハッシュキー]、FILEID [RangeKey]、...)
  • タグ(タグ[ハッシュキーFileID [RangeKey]、ProjectID [LSI Sort Key])

FileTagsでは、プライマリキーを一意にするためにFileIDが必要ですが、ProjectIDをローカルセカンダリインデックスのソートキーとして追加することができますタグ+プロジェクトIDを検索することができます。

これは何らかのデータ非正規化ですが、それは行くために必要なものです.NoSQL :-((など)。ファイルが別のプロジェクトに切り替わる場合は、ファイルだけでなくすべてのタグにもProjectIDを更新する必要があります。

関連する問題