7

私はたくさんのメッセージを受け取るシステムを持っています。各メッセージには一意の ID がありますが、存続期間中に更新を受信することもできます。メッセージの送信と処理の間の時間は非常に長くなる可能性があるため (数週間)、メッセージは S3 に保存されます。メッセージごとに、最後のバージョンのみが必要です。私の問題は、同じ ID の 2 つのメッセージが一緒に届くことがありますが、2 つのバージョン (古いものと新しいもの) があることです。

S3 が「S3 に新しいバージョンがない限り、このオブジェクトを配置する」と宣言できる条件付きの PutObject リクエストを持つ方法はありますか?

4

2 に答える 2

4

ここでアトミック操作が必要です

これは、最終的に一貫性のある S3 のユースケースではありません。いくつかのアイデア:

  • メッセージを分割してみてください。AL で始まるすべてのメッセージは 1 つのボックスに送られ、MZ は別のボックスに送られます。次に、各ボックスがローカルで重複がないことを確認します。

  • あなたの最善の策は、おそらくある種のデータベースです。ユース ケースに応じて、通常の SQL データベースを使用することも、Redis のような単純な RAM のみのデータベースを使用することもできます。SPOF を回避するために、一度に複数の Redis DB に書き込みます。

  • アイテムごとに一意の処理キューを作成できるSWFがありますが、それはおそらく S3 でチェックインするよりも多くの HTTP リクエストを意味します。

  • バージョン管理をオンにするという David のアイデアは興味深いものです。古いバージョンを定期的に削除するデーモンを使用できます。読み取るときは、最新のオブジェクトを探してバージョンを検索する「読み取り修復」を行う必要があります。

于 2013-05-07T02:39:24.377 に答える
0

これは、タグを使用し、PutObject を使用するときにその条件を使用することで解決できませんでしたか? https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html#tagging-andの「例 3: 特定のタグ キーと値を含むオブジェクト タグの追加をユーザーに許可する」を参照してください。 -ポリシー

于 2021-02-05T15:31:47.190 に答える