8

我一直在寻找并寻找一种通过范围条件删除具有相同 ID 的项目的方法。Table.DeleteItem 的重载似乎都没有一个范围条件,只有一个范围。

是否有其他方法可以删除所有超过一小时的条目?

我宁愿不必检索所有匹配的哈希键行并通过特定范围键手动删除每一行。

我主要使用 .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 仍会按项目的完整大小向您收费。

有些人通过为每个时间段(通常是一天而不是一个小时)制作一个单独的表格来解决这个时间问题。这样你就可以做一些有趣的事情:

  • 通过删除表“免费”删除旧数据
  • 将今天的表格缩放得比其他表格更高

由于 DynamoDB 的模型,这种“数据隔离”并不像看起来那么糟糕。需要获得物品吗?你已经有了时间范围键,所以你知道要问哪个表。需要查询吗?您的 Range 条件必须是基于时间的,因此您知道要询问哪些表格。

于 2013-03-04T03:07:03.920 回答