2017-02-10 7 views
0

ハッシュキーとソート(範囲)キーを使用するテーブルがあります。私の範囲キーはuuidです。私は、DynamoDBMapperを使用してデータベースにクエリを実行する任意の範囲キーを持っている場合があります。彼らは決して順調ではありません。残念ながら、私の目的のために、それらが連続している可能性はないので、キーの範囲を照会することはできません(キーはaとbの間です)。潜在的な値のセットにある範囲キーを検索するクエリ条件を持つ方法はありますか?基本的にSQL WHERE条件は次のようになります。rangeKey IN(val1、val2、...);DynamoDB:非シーケンシャル範囲キーのセットで範囲キーを照会します。

DynamoDBQueryExpressionのドキュメントによると、これはsetKeyConditionExpressionまたはsetRangeKeyConditionsを使用しては不可能と思われます。これを行う効率的な方法はありますか?または、私の潜在的な値のセットを反復し、loadメソッドを使用して個々にデータベースからそれらを取得するのが最善の策ですか?

+3

あなたのデータモデルについてもう少し詳細を共有できますか? Uuidsを自然な順序がないので範囲キーとして使用するのはちょっと変わったようです。 – hellomichibye

+0

私はhellomichibyeのコメントです。あなたのデータモデルにはある程度の作業が必要なようです。 UUIDを範囲キーとして使用することは意味がありません。 –

+0

私はそれが理想的ではないことに同意しますが、私たちが思いついた最高の解決策です。我々は、ハッシュキーを介してアクセスされる異なる顧客のためのデータベースのパーティションを持っています。パーティション内では、すべての文書が互いに独立しているため、ソートや順序付けは任意です。複数のドキュメントを別のエンティティに関連付ける参照テーブルがあるため、このクエリが必要です。ただし、そのエンティティへのドキュメント参照は頻繁に変更されるため、ソートや順序付けは非常に恣意的です。 –

答えて

1

IN操作がドキュメントhereごとにQueryではサポートされていません: - trueの場合

  • = B:

    ソートキー条件は、次の比較 演算子のいずれかを使用する必要があります。 aが値bと等しい場合

  • a < bがaより小さい場合はtrue
  • < = B -
  • がB以上である場合はtrue - > = B
  • Bより大きい場合はtrue - 真
  • > BからB以下である場合
  • a b + b + c - aがb以上で、c以下の場合はtrue。

次の機能もサポートされています

BEGINS_WITH(SUBSTR) - 真の属性Aの値が 特定のサブストリングで始まる場合。

また、Queryを実行するには、正確なハッシュキーが必要です。ユースケースで問題がなければ、Query DynamoDBを適用し、アプリケーションレイヤーにINフィルタを適用する必要があります。

正確なハッシュキーがない場合は、フィルタリングのためにIN操作を実行するScanを実行します。ドキュメントhere

+0

それは私が思ったものです。私は常にハッシュキーを持っていますが、現在の実装はあなたが上で述べたものとまったく同じです、私はそれを行うより効率的なネイティブな方法があることを望んでいました。 –

関連する問題