8

同じIDのアイテムを範囲条件で削除する方法を探して探していました。Table.DeleteItem のオーバーロードはどれも、範囲条件をとらず、範囲のみを取るようです。

1 時間以上経過したすべてのエントリを削除する他の方法はありますか?

一致するすべてのハッシュキー行を取得して、特定の範囲キーで各行を手動で削除する必要はありません。

私は主に .NET SDK を使用していますが、ヒントをいただければ幸いです。

バッチ書き込みの例をいくつか見ますが、範囲全体を取るものはありません。

private static void SingleTableBatchWrite()
{
  Table productCatalog = Table.LoadTable(client, "ProductCatalog");
  var batchWrite = productCatalog.CreateBatchWrite();

  var book1 = new Document();
  book1["Id"] = 902;
  book1["Title"] = "My book1 in batch write using .NET Helper API";
  book1["ISBN"] = "902-11-11-1111";
  book1["Price"] = 10;
  book1["ProductCategory"] = "Book";
  book1["Authors"] = new List<string> { "Author 1", "Author 2", "Author 3" };
  book1["Dimensions"] = "8.5x11x.5";
  batchWrite.AddDocumentToPut(book1);
  // Specify delete item using overload that takes PK. 
  batchWrite.AddKeyToDelete(12345);
  Console.WriteLine("Performing batch write in SingleTableBatchWrite()");
  batchWrite.Execute();
}
4

1 に答える 1

6

この機能は DynamoDB にはありません。

あなたができる最善の方法は、適切なアイテムを照会し、取得した各キーを手動で削除することです。クエリを実行するときにハッシュと範囲キーの属性のみを要求することで帯域幅を節約できますが、これは読み取り容量を節約しないことに注意してください。DynamoDB は、属性のサブセットを返すときに、アイテムのフル サイズに対して課金します。

一部の人々は、各期間 (より一般的には 1 時間よりも 1 日) ごとに別の表を作成することで、この一時的な問題に取り組んできました。そうすれば、いくつかの興味深いことができます。

  • テーブルを削除して古いデータを「無料で」削除する
  • 今日のテーブルを他のテーブルより高くスケーリングする

この「データ分離」は、DynamoDB のモデルにより、見かけほど悪くはありません。アイテムを取得する必要がありますか?すでに一時的な範囲キーを持っているので、どのテーブルに質問すればよいかがわかります。照会する必要がありますか? 範囲条件は時間ベースである必要があるため、どのテーブルに質問すればよいかがわかります。

于 2013-03-04T03:07:03.920 に答える