Split/merge 个具有 'nested' 个外键引用的 shardlet

Split/merge shardlets which have 'nested' foreign key references

目前我正忙于为我客户的现有数据库使用 Azure Elastic Sc​​ale split/merge example

我已经定义了一个数据库模式,所以可以执行 split/merge。但是,有一件事给我错误。这是对 shardlet 的嵌套引用(要拆分的标识符)。

在 split/merge 示例的文档页面上,有以下示例代码来指定数据库架构:

// Create the schema annotations 
SchemaInfo schemaInfo = new SchemaInfo(); 

// Reference tables 
schemaInfo.Add(new ReferenceTableInfo("dbo", "region")); 
schemaInfo.Add(new ReferenceTableInfo("dbo", "nation")); 

// Sharded tables 
schemaInfo.Add(new ShardedTableInfo("dbo", "customer", "C_CUSTKEY")); 
schemaInfo.Add(new ShardedTableInfo("dbo", "orders", "O_CUSTKEY")); 

// Publish 
smm.GetSchemaInfoCollection().Add(Configuration.ShardMapName, schemaInfo); 

这段代码可能会起作用,因为它相当简单。 但是,如果有另一个 table、OrderLines,它有一个 FKOrders,它又有一个 FKCustomer

在这种情况下,您应该如何定义架构?

orderlinesorders 之间是否必须指定密钥?我猜这是有道理的。

// Sharded tables 
schemaInfo.Add(new ShardedTableInfo("dbo", "customer", "C_CUSTKEY")); 
schemaInfo.Add(new ShardedTableInfo("dbo", "orders", "O_CUSTKEY")); 
schemaInfo.Add(new ShardedTableInfo("dbo", "orderslines", "OL_ORDERKEY")); 

我问的原因是因为我正在处理的数据库与 shardlet 有很多这样的 'nested' 关系,我不确定如何指定模式。 我已经注意到将它们指定为 ReferenceTableInfo 不是一个选项,因为这样工具会尝试在满足 OrderLinesOrders 之间的 FK 关系之前插入记录。

Split/Merge 服务将跟踪 FK 依赖项并以正确的顺序移动 table。重要的是,即使 OrdersLines table 包含分片键(客户键),然后它还需要包含一个订单键来处理 FK。但是这个键不需要是 SchemaInfo 的一部分。

但是,在您定义的 OrdersLines table.

中,FK 引用将是 Customer-key、Order-key 的组合