1

DynamoDB テーブルに大量の写真を保存しようとしています。各写真は「アルバム」に属することができます。実際、写真は複数のアルバムに属することができます。データをセットアップして、album_id のクエリを実行し、そのアルバムに属するすべての photo_id を取得できるようにしたいと考えています。

例: 「アルバム 1 に属するすべての写真を取得してください」

table "album-photo-map"
keys(album_id, timestamp) - photo_id

次に、album-photo-map テーブルに対して範囲クエリを実行し、タイムスタンプの range_key が 0 より大きいアルバム「1」に属するすべての photo_id を要求します。

問題は、同じタイムスタンプを持つ 2 枚の写真がある場合はどうなるかということです。DynamoDB では、同じキーを持つ複数のアイテムを使用できません。

これを回避する 1 つの方法は、photo_id のバイナリ リストを album_id のデータ フィールドの 1 つに格納することですが、写真のリストが 64K に制限されてしまいます。

私はこれについて正しく考えていますか?タイムスタンプの重複問題の解決策はありますか? おそらく私は次のようなことができます:

timestamp = str(time.time()).replace('.','')
>> 134704419008

そしてそれを保存しますか?重複の問題を解消するのに十分な速さでしょうか?

4

1 に答える 1

1

イメージのハッシュを range_key として使用できます。ハッシュ関数が適切に選択されていれば、画像が重複する可能性はほとんどなく、同一ではありません。このキーは、コンテンツに直接関連しているため、さらに優れています。

パフォーマンスが重要な場合は、キーに乱数を追加するだけでかまいません。

于 2012-09-07T19:14:12.703 に答える