Split/merge 个具有 'nested' 个外键引用的 shardlet
Split/merge shardlets which have 'nested' foreign key references
目前我正忙于为我客户的现有数据库使用 Azure Elastic Scale 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
,它有一个 FK
到 Orders
,它又有一个 FK
到 Customer
。
在这种情况下,您应该如何定义架构?
orderlines
和 orders
之间是否必须指定密钥?我猜这是有道理的。
// 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
不是一个选项,因为这样工具会尝试在满足 OrderLines
和 Orders
之间的 FK 关系之前插入记录。
Split/Merge 服务将跟踪 FK 依赖项并以正确的顺序移动 table。重要的是,即使 OrdersLines table 包含分片键(客户键),然后它还需要包含一个订单键来处理 FK。但是这个键不需要是 SchemaInfo 的一部分。
但是,在您定义的 OrdersLines table.
中,FK 引用将是 Customer-key、Order-key 的组合
目前我正忙于为我客户的现有数据库使用 Azure Elastic Scale 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
,它有一个 FK
到 Orders
,它又有一个 FK
到 Customer
。
在这种情况下,您应该如何定义架构?
orderlines
和 orders
之间是否必须指定密钥?我猜这是有道理的。
// 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
不是一个选项,因为这样工具会尝试在满足 OrderLines
和 Orders
之间的 FK 关系之前插入记录。
Split/Merge 服务将跟踪 FK 依赖项并以正确的顺序移动 table。重要的是,即使 OrdersLines table 包含分片键(客户键),然后它还需要包含一个订单键来处理 FK。但是这个键不需要是 SchemaInfo 的一部分。
但是,在您定义的 OrdersLines table.
中,FK 引用将是 Customer-key、Order-key 的组合