web-dev-qa-db-ja.com

DynamoDBから値を取得する

AmazonのDynamoDBを調べ始めたところです。明らかにスケーラビリティは魅力的ですが、私は頭をSQLモードから非SQLモードにしようとしています。これを行うことができますか(dynamodbのすべてのスケーラビリティの利点を使用して):

いくつかの番号でインデックス付けされた多数のエントリ(たとえば500万から1000万)を用意します。各エントリのフィールドの1つは、作成日です。 dynamo dbが2つの日付の間に作成されたすべてのエントリをWebアプリに提供する効果的な方法はありますか?

もっと簡単な質問-dynamodbは、フィールドが特定の番号に一致するすべてのエントリを表示できますか?つまり、数値である別のフィールドがあります。引数のために、0から10の間としましょう。dynamodbに、値を持つすべてのエントリを提供するように依頼できますか。 6?

これらのクエリは両方とも、データセット全体のスキャンが必要ですか(データセットのサイズを考えると問題だと思いますか?)

どうもありがとう

17
Stuart

Dynamo dbが2つの日付の間に作成されたすべてのエントリをWebアプリに提供する効果的な方法はありますか?

はい、AmazonDynamoDBデータモデル内の 主キー の概念、具体的にはハッシュと範囲タイプの主キーをご覧ください。

この場合、主キーは2つの属性で構成されます。最初の属性はハッシュ属性で、2番目の属性は範囲属性です。 Amazon DynamoDBは、ハッシュ主キー属性に順序付けされていないハッシュインデックスを作成し、範囲主キー属性に並べ替えられた範囲インデックスを作成します。 [...]

リストされたサンプルは、ユースケースを正確に示しています。つまり、Reply(Id、ReplyDateTime、...)テーブルは、タイプハッシュと範囲の主キーとハッシュ属性を容易にします。 Idおよび範囲属性ReplyDateTime

これは、 Query AP​​Iを介して使用します。詳細についてはRangeKeyConditionを、それぞれの例については Amazon DynamoDBのテーブルのクエリ を参照してください。

dynamo dbは、フィールドが特定の番号に一致するすべてのエントリを提供できますか? [...] dynamodbに、値を持つすべてのエントリを提供するように依頼できますか? 6?

これも可能ですが、 Scan AP​​Iのみを使用します(つまり、テーブル内のすべてのアイテムを実際に読み取る必要があります)。詳細についてはScanFilterを、 Scanning Tables inそれぞれの例については、Amazon DynamoDB

これらのクエリは両方とも、データセット全体のスキャンが必要ですか(データセットのサイズを考えると問題だと思いますか?)

前述のように、最初のアプローチはクエリで機能し、2番目のアプローチはスキャンを必要とし、一般に、クエリ操作はスキャン操作よりも効率的です-これは詳細はより複雑でユースケースによって異なりますが、開始することをお勧めします。 Amazon DynamoDBのクエリとスキャン の概要内のセクションスキャンとクエリのパフォーマンスを参照してください。

応答時間を短縮するには、代わりにQuery、Get、またはBatchGetItemAPIを使用できるようにテーブルを設計します。または、テーブルのリクエストレートへの影響を最小限に抑える方法でスキャン操作を使用するようにアプリケーションを設計します。詳細については、 Amazon DynamoDBでプロビジョニングされたスループットガイドライン を参照してください。

したがって、NoSQLソリューションを適用するときはいつものように、これらの制約に対応するためにアーキテクチャを調整する必要があるかもしれません。

20
Steffen Opel