0

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

联合“主键”= (Fed_key, CustId)whereOrderId是类型int或=如果 CustId==偶数,longint如果CustId==奇数。Fed_key01

例如:

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?我想这需要在联合创建或联合表创建期间完成。

4

2 回答 2

0

来自文档(链接):

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

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

于 2013-03-16T06:16:50.073 回答
0

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

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

于 2013-03-16T06:26:06.087 回答