16

Amazon AWS DynamoDB の質問です。

CONTAINS、IN、BETWEEN などの RangeKeyCondition と ComparisonOperators を使用する例はありますか。複合 RangeKey (連結および区切り) に基づいてデータを取得しようとしています。たとえば、書籍テーブルの日付 + 著者 + キーワード。この場合、HashValue が「book」であると仮定します (book、dvd、video、link などの可能性があります)。キーワード「magic」を含むすべての本、または著者「John Doe」のすべての本を選択したいと考えています。サンプル レコード/アイテムは次のようになります。

ハッシュ------範囲------------------------------------------ ----------------------- 属性1 ... 属性x

book-----2012-1-20~john doe~adventure~magic~travel----------------description ... some stuff

条件演算子 IN または CONTAINS を使用しようとすると、次のエラーが発生します: object(CFSimpleXML)20 public '__type' => string 'com.amazon.coral.validate#ValidationException' (length=45) public 'message' = > 文字列 '試行された条件付き制約はインデックス可能な操作ではありません'

これらの ComparisonOperators を使用した例は見つかりませんでした。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

41

Amazon DynamoDB のクエリとスキャンの 2 つの検索 API の違いを理解することが重要です。

  • クエリ

    クエリ操作は、主キー属性値のみを検索し、キー属性値に対する比較演算子のサブセットをサポートして、検索プロセスを絞り込みます。クエリは、一致する主キー (各アイテムのすべての属性) のすべてのアイテム データを、クエリ操作ごとに最大 1MB のデータで返します。[...]

    [..] クエリ操作で使用できる各比較演算子については、Query の API エントリを参照してください。

    [鉱山を強調]

  • スキャン

    スキャン操作はテーブル全体をスキャンします。結果に適用するフィルタを指定して、完全なスキャン後に返される値を絞り込むことができます。Amazon DynamoDB は、スキャンに 1MB の制限を設けています (制限は、結果がフィルタリングされる前に適用されます)。[...]

    [...] スキャン操作で使用できる各比較演算子については、Scan の API エントリを参照してください。

現在、Query API の RangeKeyCondition:ComparisonOperator でサポートされているサブセットでは、とが除外 されていますが、どちらもScan API内で使用できます。両方の API で使用できるのは比較演算子だけです。CONTAINSINBETWEEN

この制限は、パフォーマンスに関する考慮事項に起因する可能性が最も高いです。つまり、サポートCONTAINSすると、予測可能なパフォーマンス/スループットという DynamoDB の目標が達成できなくなる可能性があります。

NoSQL ソリューションの場合と同様に、アプリケーションの設計を適宜調整することで、これらの制限を考慮する必要があります。つまり、ユース ケースと対象とする特定の NoSQL アーキテクチャの両方に対処する必要があります。

幸運を!

于 2012-01-27T16:11:11.643 に答える