我的同事和我当前正在为产品实现撤销/重做功能。我们使用命令模式并在表'ProductHistory'中保存每个命令(例如,创建组件'myFancyComponent')作为TableStorageEntry
。本表中的PartitionKey
是唯一的产品名称,RowKey
是一个唯一的标识符。从Azure表中删除数百个实体存储
问题是如果产品被删除,它也应该删除表存储中的整个历史记录。使用批量删除会变得非常复杂,因为有几个限制: 100个实体或最大4 MB(无论是更小的)。这个问题有什么最佳实践吗?或者是唯一的解决方案来查询所有条目并检查条目的大小,并批量删除正确数量的条目?
我也发现这个相似的question,并考虑为每个产品创建一个表。它似乎有这种做法的一些优点:
- 选择应该会更快,因为只有一个表将被查询
- 删除很容易,只需要删除整个表
只有缺点我发现(在“Windows Azure的表” - 白皮书):
- 需要注意的是,当一个表被删除,同一个表名不能被重新创建至少30秒,而表被垃圾收集。
如果我创建几百个表,是否还有其他(性能)问题?
你能详细说明解决30秒限制的第二种方法吗?您是否建议创建产品,但不建议使用表格,并在稍后删除旧表格时创建表格? – Robar 2012-03-28 11:47:59
实现规模的努力取决于停止“实时”操作。排队创建新产品的请求,并在完成后直接向用户发送消息。是的,我们习惯于即时满足,但这种方法更具可扩展性,并且还可以解决您的30秒等待时间限制。 :) – BrentDaCodeMonkey 2012-03-28 17:05:58