【问题标题】:Compound rowkey in Azure Table storageAzure 表存储中的复合行键
【发布时间】:2013-06-04 08:46:48
【问题描述】:

我想将我的一些 Azure SQL 表移动到表存储。据我了解,我可以将所有内容保存在同一个表中,使用 PartitionKey 将其分开,并使用 Rowkey 在每个分区中保持其唯一性。 现在,我有一个带有复合键的表:

  • ParentId:(唯一标识符)
  • 报告时间:(日期时间)

我也明白 RowKeys 必须是字符串。我需要将这些组合成一个字符串吗?或者我可以通过其他方式组合多个键吗?我是否需要制作新钥匙?

感谢任何帮助。

更新

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

我将使用 ParentId 和 WeekNumber(另一列)进行查询。该表每周从数据库中删除大约 100 万行。我的另外两张表大约有 600 万和 350 万

【问题讨论】:

    标签: windows azure storage composite


    【解决方案1】:

    这个问题非常广泛,没有正确答案。

    具体问题 - 您能否将复合键与 Azure 表存储结合使用。是的,你可以这么做。但这涉及到对象属性的手动序列化/反序列化。您可以通过覆盖 TableEntity 的 ReadEntityWriteEntity 方法来实现。检查this detailed blog post,了解如何覆盖这些方法以使用您自己的自定义序列化/反序列化。

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

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

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

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

    由于您必须定期删除实体,假设它固定为 WeekNumber,我可以建议您动态创建表并在其名称中包含周数。这样你就可以实现:

    • 更好的信息划分
    • 更轻松、更精细的信息备份/删除
    • 删除数百万个实体只需要一项操作 - 删除表。

    【讨论】:

    • 非常感谢您的输入,我会为每种类型的数据使用一个存储表并全部删除而不是清空。当我查询我的数据时,我使用 ParentId 和 WeekNumber 来获取一系列行(进行一些计算)。它们一起不是唯一的,据我了解,行键(连同分区键)需要是唯一的。
    【解决方案2】:

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

    【讨论】:

    • 我的想法是将数据从几个(现在三个)数据库表中放入同一个存储表中,并用分区键将它们分开。我使用 ParentId 和 WeekNumber(另一列)进行查询。该表每周从数据库中删除大约 100 万行。我的另外两张桌子大约有 600 万和 350 万。
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2013-09-17
    • 2012-03-08
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多