这个问题非常广泛,没有正确答案。
具体问题 - 您可以将复合键与 Azure 表存储一起使用。是的,你可以这么做。但这涉及到对象属性的手动序列化/反序列化。您可以通过重写 TableEntity 的ReadEntity和WriteEntity方法来实现。查看这篇详细的博客文章,了解如何覆盖这些方法以使用您自己的自定义序列化/反序列化。
我将进一步讨论我对您更广泛问题的看法。
首先,为什么要将 3 个(SQL)表中的数据放在一个(Azure 表)中?只有 3 个 Azure 表。
第二个想法,正如 Fabrizio 指出的那样,您将如何查询记录。因为 Windows Azure Table 服务只有一个索引,那就是PartitionKey
+RowKey
属性(列)。如果您非常确定您将主要通过已知 PartitionKey
和查询数据RowKey
,那么 Azure Tables 非常适合您!但是你说你的组合RowKey
是ParentId + WeekNumber
!这意味着该组合可以唯一标识一条记录!如果这是真的,那么你就更准备好了。
接下来你说你要每周删除记录!您应该知道DELETE操作作用于单个实体。您可以使用Entity Group Transactions一次删除多个实体,但有一个限制(a)
批量操作中的所有实体必须具有相同PartitionKey
,(b)
每个批量的最大实体数为 100,(c)
批量操作的最大大小为 4MB。假设您有 1M 条记录,就像您说的那样。为了删除它们,您必须首先按 100 分组检索它们,然后按 100 分组删除它们。在最好的情况下,这些是 10k 检索操作和 10k 删除操作。如果事件仅花费 0.002 美元,请考虑针对 REST API 执行 10k 操作所花费的时间。
由于您必须定期删除实体,例如固定为 WeekNumber,我可以建议您动态创建表并在其名称中包含周数。因此,您将实现:
- 更好的信息划分
- 更轻松、更细粒度的信息备份/删除
- 删除数百万个实体只需要一项操作 - 删除表。