微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure表存储中的复合rowkey

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

ParentId :(唯一标识符)

ReportTime:(datetime)

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

任何帮助表示赞赏。

UPDATE

Wayland合成者不能像X那样做窗饰吗?

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

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

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

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

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

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

第二个想法,正如Fabrizio指出的那样,你将如何查询记录。 因为Windows Azure Table服务只有一个索引,那就是PartitionKey + RowKey属性(列)。 如果您确定您将主要通过已知的 PartitionKey和RowKey查询数据,则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万件? 总的存储使用情况非常重要。 但考虑到您将生成的存储事务的数量也是非常重要的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐