Azure表存储中的复合rowkey

我想将一些Azure SQL表移动到Table存储。 据我所知,我可以保存在同一个表中的所有内容,使用PartitionKey分隔,并使用Rowkey在每个分区内保持独特。 现在,我有一个复合键的表格:

  • ParentId :(唯一标识符)
  • ReportTime:(datetime)

我也明白RowKeys必须是string。 我需要将这些组合在一个string中吗? 或者我可以用其他方式组合多个键? 我需要做一个新的钥匙吗?

任何帮助表示赞赏。

UPDATE

我的想法是将几个(现在三个)数据库表的数据放在同一个存储表中,用分区键来分隔它们。

我将使用ParentId和WeekNumber(另一列)进行查询。 这个表格大约有100万行,每周从数据库中删除。 我的另外两张桌子大概有六百万到三百五十万

这个问题相当广泛,没有正确的答案。

具体的问题 – 你可以使用复合键与Azure表存储。 是的,你可以这么做。 但是这涉及对象的属性的手动序列化/反序列化。 您可以通过重写TableEntity的ReadEntity和WriteEntity方法来实现这一点 。 检查这个详细的博客文章 ,你如何覆盖这些方法来使用你自己的自定义序列化/反序列化。

我将进一步讨论你对更广泛问题的看法。

首先,为什么要将3(SQL)表中的数据合并到一个表(Azure表)中? 只有3个Azure表。

第二个想法,正如Fabrizio指出的那样,你将如何查询记录。 因为Windows Azure Table服务只有一个索引,那就是PartitionKey + RowKey属性(列)。 如果您确定您将主要通过已知的 PartitionKeyRowKey查询数据,则Azure Tables非常适合您! 但是你说你的RowKey组合是ParentId + WeekNumber ! 这意味着一个记录是由这个组合唯一确定的! 如果这是真的,那么你就更加准备好了。

接下来你说你每周都要删除记录! 您应该知道DELETE操作在单个实体上执行。 您可以使用实体组事务一次删除多个实体,但是有以下限制: (a)批操作中的所有实体必须具有相同的PartitionKey(b)每批最多实体数量为100, (c)批量操作的最大大小是4MB。 假设你有像你说的1M记录。 为了删除它们,你必须首先将它们按100个分组进行检索,然后再将它们删除100个。在最好的情况下,对于检索10K操作和对删除10K操作,这是最好的情况。 事件如果只花费0.002美元,请考虑对REST API执行10k操作所需的时间。

由于您必须定期删除实体(固定为WeekNumber),所以我建议您动态创建表并在其名称中包含星期编号。 这样你就可以实现:

  • 更好的分区信息
  • 更简单,更细化的信息备份/删除
  • 删除数百万个实体只需要一个操作 – 删除表。

你的问题没有一个独特的解决方案。 是的,您可以将ParentID作为PartitionKey和ReportTime用作Rowkey(或反转分配)。 但重要的两个主要问题是:你如何查询你的数据,以什么条件? 你有多少数据存储? 1000,100万件,1000万件? 总的存储使用情况非常重要。 但考虑到您将生成的存储事务的数量也是非常重要的。