从Azure表存储中删除数百个实体

时间:2012-03-28 10:08:01

标签: azure azure-table-storage

我的同事和我目前正在为产品实施撤消/重做功能。我们使用命令模式并将每个命令(例如,创建组件'myFancyComponent')保存为表​​'ProductHistory'中的TableStorageEntry。此表中的PartitionKey是唯一的产品名称,RowKey是唯一标识符。

问题是如果产品被删除,它还​​应该删除表存储中的整个历史记录。使用批量删除可能会变得非常复杂,因为有几个限制:最大。 100个实体或最多4 MB(无论什么是较小的)。这个问题有什么最佳做法吗?或者是查询所有条目和检查条目大小的唯一解决方案,而不是批量删除正确数量的条目?

我也发现了这个类似的question,并考虑为每个产品创建一个表。看来这种方法有一些优点:

  • 选择应该更快,因为只会查询一个表
  • 删除很简单,只需删除整个表格

我发现的唯一缺点(在'WINDOWS AZURE TABLE' - 白皮书中):

  • 请注意,删除表时,在对表进行垃圾回收时,无法重新创建相同的表名至少30秒。

如果我创建了几百个表,还有其他(性能)问题吗?

1 个答案:

答案 0 :(得分:8)

我强烈推荐每种产品的单一表格方法,因为您指出它将很快消除批量删除事务的需要,如果您想删除30秒限制,您只需要有一个索引表存储表及其产品之间的关系。然后,您可以将产品标记为已删除,并在重新添加时重新分配其表。因此允许30秒限制的简单旁路。另一种方法(我也建议)是分离产品的添加,以便异步发生,从而允许您在名称再次可用时等待创建表。

对于性能问题,即使您有数千个表,但不超过Azure存储帐户上当前每秒5k事务限制,也不会出现问题。 :)