【问题标题】:What is the difference between ReferenceTableInfo to ShardedTableInfo in Azure Elastic DB?Azure Elastic DB 中 ReferenceTableInfo 与 ShardedTableInfo 有什么区别?
【发布时间】:2016-03-14 18:11:23
【问题描述】:

我下载了示例代码 -> “ElasticScaleStarterKit” (在 Visual Studio -> 文件 -> 新建 -> 项目 -> 在线 -> 适用于 Azure SQL 的 Elastic DB 工具 - 入门)。

架构定义如下:

schemaInfo.Add(new ReferenceTableInfo("Regions"));
schemaInfo.Add(new ReferenceTableInfo("Products"));
schemaInfo.Add(new ShardedTableInfo("Customers", "CustomerId"));
schemaInfo.Add(new ShardedTableInfo("Orders", "CustomerId"));

ReferenceTableInfo 和 ShardedTableInfo 有什么区别?

我了解,简单的区别在于适用于所有数据库(如状态表等)的“干”信息与特定客户的个人信息。

但是,如果所有表都设置为引用会怎样?这种设置有什么缺点:

schemaInfo.Add(new ReferenceTableInfo("Regions"));
schemaInfo.Add(new ReferenceTableInfo("Products"));
schemaInfo.Add(new ReferenceTableInfo("Customers"));
schemaInfo.Add(new ReferenceTableInfo("Orders"));

希望得到任何帮助:)

谢谢!

【问题讨论】:

    标签: azure-sql-database azure-elastic-scale


    【解决方案1】:

    参考表是数据被复制的表,这意味着如果参考表有 5 行,那么这 5 行将存在于参考表的所有实例上。

    但是,分片表是对数据进行分区的表。例如,如果您在 Sharded 表中有 5 行数据,那么 2 行将存在于一个 Shard(或数据库)上,3 行将存在于另一个上。所以没有两个数据库会有相同的行集。

    拆分/合并工具也使用此信息。对于复制表,所有行都从源复制到目标,而对于分片表,行从源移动到目标。

    希望这会有所帮助!

    【讨论】:

    • 这是否意味着如果将一行添加到某个 Shard 中的 Reference 表中,该行将在所有 Shard 中复制?如果使用新行更新引用表,这是最佳做法吗?
    • 在将规范化数据库转换为与弹性数据库一起使用时,我认为需要进行反规范化以确保分片键必须位于所有分片表上。例如。客户在一个区域内,一个订单只有一个客户,所以规范化的订单没有 RegionId,因为它是从客户派生的。但是,要分片,必须添加 RegionId - 对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2017-01-03
    • 2019-02-23
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多