17

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

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

より簡単な質問 - dynamo db は、フィールドが特定の数値に一致するすべてのエントリを私に与えることができますか? つまり、数値である別のフィールドがあります。議論のために、0 から 10 までとしましょう。dynamodb に、値が 6 などのすべてのエントリを提供するように依頼できますか?

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

どうもありがとう

4

1 に答える 1

20

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

はい、 Amazon DynamoDB Data Model内のPrimary Keyの概念、特にHash and Range Type Primary Keyをご覧ください。

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

リストされたサンプルはユース ケースを正確に特徴付けます。つまり、Reply ( Id, ReplyDateTime, ... )テーブルは、ハッシュ属性Idと範囲属性ReplyDateTimeを持つHash および Range型の主キーを容易にします。

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

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

これは、Scan API のみを使用しても可能です (つまり、実際にはテーブル内のすべての項目を読み取る必要があります)。詳細についてはScanFilterを参照し、それぞれの例については Amazon DynamoDB のテーブルのスキャンを参照してください。

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

前述のように、最初のアプローチはQueryで機能しますが、2 番目のアプローチはScanを必要とします。一般に、クエリ操作はスキャン操作よりも効率的です。詳細はより複雑であり、使用方法によって異なりますが、これは開始するための良いアドバイスです。その場合は、Amazon DynamoDBのクエリとスキャンの概要のセクションスキャンとクエリのパフォーマンスを参照してください。

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

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

于 2012-02-06T20:28:17.963 に答える