按ID和范围条件删除行?

时间:2013-03-01 21:49:45

标签: range amazon-dynamodb

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

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

我宁愿不必检索所有匹配的hashkey行,并按特定范围键手动删除每一行。

我主要使用.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();
}

1 个答案:

答案 0 :(得分:6)

DynamoDB中不存在此功能。

您可以做的最好的事情是查询相应的项目并手动删除每个检索到的密钥。您可以通过在查询时仅询问哈希和范围键属性来节省带宽,但请注意,这不会节省读取容量;返回其属性的子集时,DynamoDB仍会向您收取项目的完整大小。

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

  • 通过删除表格“免费”删除旧数据
  • 比今天更高的比例表

由于DynamoDB的模型,这种“数据隔离”并不像看起来那么糟糕。需要得到一个项目?您已经拥有时间范围键,因此您知道要询问哪个表。需要查询?您的范围条件必须是基于时间的,因此您可以知道要询问哪些表。