1. ホーム
  2. amazon-web-services

[解決済み] DynamoDBに日付でクエリする

2022-06-25 17:19:31

質問

私はリレーショナルデータベース出身で、amazonのDynamoDBと一緒に仕事をしようとしています。

私はハッシュキー"DataID"と範囲"CreatedAt"とその中の項目の束を持つテーブルを持っています。

私は、特定の日付以降に作成されたすべての項目を取得し、リレーショナル データベースで非常に簡単な日付で並べ替えようとしています。

DynamoDBでは、私が見つけることができた最も近いものは、クエリであり、フィルタよりも大きい範囲キーを使用することです。唯一の問題は、クエリを実行するためにハッシュ キーが必要なことで、これは目的を破っています。

私は何を間違えているのでしょうか?私のテーブル スキーマが間違っているのでしょうか、ハッシュ キーが一意であってはいけないのでしょうか。あるいは、クエリを実行する別の方法があるのでしょうか?

どのように解決するのですか?

回答を更新しました。

DynamoDBでは、このようなクエリを支援するためにセカンダリインデックスを指定することができます。 セカンダリインデックスは、ハッシュキーをまたいでテーブル全体に渡るグローバルインデックスと、各ハッシュキーのパーティション内に存在するローカルインデックスがあり、クエリを実行する際にハッシュキーも指定する必要があります。

この質問の使用例では、"CreatedAt"フィールドのグローバルセカンダリインデックスを使用したいと思います。

DynamoDBのセカンダリインデックスの詳細については セカンダリインデックスのドキュメントを参照してください。

オリジナルの回答です。

DynamoDBはレンジキーのみでのインデックス検索を許可していません。 ハッシュキーは、サービスがデータを見つけるためにどのパーティションで検索するかを知るために必要です。

もちろん、日付の値でフィルタリングするためにスキャン操作を実行することはできますが、これはフルテーブルスキャンを必要とするので、理想的ではありません。

複数の主キーにまたがる時間によるレコードのインデックス検索を行う必要がある場合、DynamoDBは理想的なサービスではないかもしれませんし、インデックス検索を行うためのアイテムメタデータを格納するために別のテーブル(DynamoDB内またはリレーショナルストア)を利用する必要があるかもしれません。