【问题标题】:Creating an Azure SQL federation sharded off last digit of INT/LONGINT?创建 Azure SQL 联合将 INT/LONGINT 的最后一位分片?
【发布时间】:2013-03-04 16:43:20
【问题描述】:

假设一个表有一个int 或longint 类型的主键(CustId)。我们想根据OrderId 是奇数还是偶数将该表分片成一个联合表。即

联合“主键”=(Fed_key, CustId) 其中OrderId 的类型为int 或longint 和Fed_key = 0 如果CustId==偶数,1 如果CustId==奇数。

例如:

CustId = 1234 => Federated 'primary key' = (0,1234) 

CustId = 6789 => Federated 'primary key' = (1,6789)

这基本上给了我们 2 个联邦成员(又名分区)。稍后我们可能会将 Fed_key 分组为 (1,3,5)、(2,4,6) 和 (7,8,9,0) 以用于其他分区。我们认为我们不需要超过 5 个分区。

问题:如何将上述逻辑表达到 Azure SQL?我想这需要在联邦创建或联邦表创建期间完成。

【问题讨论】:

    标签: azure-sql-database federation federated-table


    【解决方案1】:

    来自文档(link):

    联合列不能是持久化或非持久化计算列。

    另外,假设一个客户有多个订单,你真的要查询 x 个联盟成员来获取所有订单吗?

    【讨论】:

    • 你是对的,我注意到错误的列。漫长的一天。它在 CustId 上分片。
    【解决方案2】:

    首先,我们从 INT/LONGINT 身份转换为非分片主键的 GUID/唯一标识符。 GUID 在应用程序层中创建。在应用层本身,我们选择 guid 的最后一个半字节并决定 partitionId。

    现在PartitionId, CustId 是联邦范围的主键,应用程序在任何事务期间将其呈现给数据库层。这已经过测试。

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多