web-dev-qa-db-ja.com

比較演算子を使用したDynamoDBクエリ

Amazon AWSDynamoDBの質問。

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

ハッシュ------範囲------------------------------------------ ----------------------- attribute1 ... attributex

本------ 2012-1-20〜john doe〜adventure〜magic〜travel ---------------- description ...いくつかのもの

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

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

ありがとう。

15
user573306

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

  • クエリ

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

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

    [強調鉱山]

  • スキャン

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

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

現在、クエリAPIのRangeKeyCondition:ComparisonOperatorでサポートされているサブセットCONTAINSINを除外しています。どちらも使用可能です。 スキャンAPI内ですが;両方のAPI内で使用できるのは比較演算子BETWEENのみです。

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

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

幸運を!

36
Steffen Opel