2016-12-01 5 views
0

RDMSバックグラウンドから来ており、最近DynamoDBを使用し始めました。DynamoDB:クエリのグローバルセカンダリインデックスの使用

I 3つのグローバルセカンダリインデックス(GSI)

ID(主キー)、USER_ID(GSI)、EVENT_TYPE(GSI)、PRODUCT_IDとDyamoDBテーブル下記有する(GSI

私は3つのクエリパターン、次ている) 、レート、CREATE_DATE:

  • a)WHERE event_type =?
  • b)WHERE event_type =? AND product_id =?
  • c)WHERE product_id =?
  • d)WHERE product_id =?とuser_id =?

私はMySQLの中で、私は、クエリの上に最適化するために、次のインデックスを作成する必要があります知っている:

  • 複合指数(EVENT_TYPE、PRODUCT_ID):クエリの "a" および "b"
  • 複合インデックス( PRODUCT_ID、USER_ID):クエリの "C" と "D" のための

私は、クエリパターンを、 'EVENT_TYPE'、 'PRODUCT_ID' とDyanomoDBの 'user_idの' フィールドに3つのGSISを作成行う場合は私の質問は、あります " bとdはこれら3つの独立したG SIs?

+0

DynamoDBはindexedDBをベースにしていますか? indexedDBは、ブラウザでサポートされ、Javascriptでアクセス可能な組み込みデータベースです。あなたの質問がそれに関連していない場合は、タグを削除してください。 – Josh

答えて

1

第1に、RDBMSとは異なり、Dynamodbはフィルタ式で使用されるフィールドに基づいてGSIを選択しません(SQLで使用されるフィールドに基づいて適切なインデックスを選択するSQLオプティマイザはありません)。

データを取得するには、GSIに直接クエリする必要があります。 GSIのクエリページを参照して、これについてもっと理解することができます。

次の2つのGSIS作成することができます - あなたはGSI特に、製品ID、ユーザIDの他の必須フィールドが含まれていることを確認してください

1)イベントタイプ

2)プロダクトID

をし、その他の必須フィールド。このようにしてGSIに問い合わせると、ユースケースを満たすために必要なすべてのフィールドが取得されます。 GSIのフィールドが1つある限り、データをフィルタリングするために、他のフィールドをフィルタ式に含めることができます。これは、余分なスペースとコストを必要とする不要なGSIを作成しないことを保証します。

関連する問題