2017-09-19 20 views
0

特定のクエリが可能になるように、私のテーブルの設計に関するアドバイスが必要です。私のメインテーブルは以下のユーザー情報を持っています:Dynamodb:ホットスポットとデータモデル

id | gender | location | fullDOB | yearDOB | name

次のような質問に答えることができる必要があります:50マイル以内の男性/女性の25〜35歳のユーザーのリストを提供してください。おそらく、将来、私がフィルタリングする属性をさらに追加したいと考えています。私は現時点で場所の部分を把握することを心配していない、私は年齢と性別を開始したい。フィールドyearD0Bを作成したので、ユーザーの年齢に基づいてクエリを実行できます。私は上のフィルタう他の属性と一緒にyearDOBにGSIを作成したいこれを行うためにそうようになりGSIは、次のとおりです。

yearDOB(pk) | id (sort key) | gender | location

は、その後、私は残りの属性にクエリやフィルタを発行することができます。ただし、yearDOBを使用すると10,000人のユーザーが同じ誕生年を迎え、ホットスポットが生まれます。これを解決する1つの方法は、乱数を追加することですが、ホットスポットを避けるためには非常に大きな範囲内になければなりません。これは、この数が大きい場合、特定の年齢のすべてのユーザーに照会しようとすると頭痛を引き起こします。

質問:

1)フィルターにGSIを作成するための私のアプローチは、クエリの上記のタイプをサポートすることの面で良い属性ますか?

2)良い場合はどうすれば効率的にホットパーティションの問題を解決できますか?

答えて

0

多くの研究の結果、DynamoDbはこれらの種類のクエリを実行するのに適していないことに気付きました。どういうわけかホットスポットを避けていたとしても、ユーザーが自分の誕生日を変更したければ、GSIの主キーを更新できないため不可能でした。ダイナモでの簡単なクエリは重要なジギリーポケリーなしでは可能ではありません。 RDSに戻ると、同情...

関連する問題