首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨分区连接

跨分区连接
EN

Database Administration用户
提问于 2018-11-12 18:52:49
回答 1查看 576关注 0票数 2

用于分区状态的Server文档:

在可能的情况下,尽量减少垂直分区和功能分区之间对引用完整性的要求。如果需要跨分区连接,则在分区上运行并行查询并连接应用程序中的数据。

https://learn.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning

我确实理解,缺乏引用完整性将使写入速度更快,因为不需要检查其他分区是否存在引用约束。但是,如何处理应用程序中的连接是对数据库服务器的beneficial.The请求数量,如果由关系数据库连接完成,所需的处理将是相同的,不是吗?(此外,对于应用程序端连接,应用服务器和数据库服务器之间的网络往返将带来负担。)

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-11-12 20:53:20

要非常小心,不要将表分区与(和?)数据库切分这篇文章没有给自己带来任何好处,因为它拥有这样一个通用和重载的标题,而且您不是第一个开始将切分称为分区的人。

事实上,已经有一个请求将标题更改为水平、垂直和功能数据分区

minimize requirements for referential integrity位意味着您不应该对通常加入的数据进行切分。如果你的问题是“什么时候处理加入申请是有益的?”这将是一个狭窄的用例,应用程序和碎片之间的延迟可能比碎片之间的延迟(比如分布式应用程序和地理复制数据)之间的延迟要好,而且当所有数据都缓存在离应用程序更近的地方时(例如Redis),因为大多数好的应用程序都会在最近几天计划好。确保你做了正确的研究,以确定(a)你根本需要切分,和(b)你应该分离数据,你计划加入很多。几乎可以肯定的是,会有分离策略,将跨碎片或应用程序中的连接需求降到最低。

当您要编写的每个节点包含的数据基本上是独立的,并且可以在没有任何其他节点的情况下生存时,分片效果最好。当它们相互依赖,而你又在它们之间加入时,你在很大程度上挫败了把它们分开的目的。一个很好的用例是,每个客户/租户都有自己的碎片(或者在其中一个碎片上有自己的数据库)。对于任何给定的租户,大多数活动都集中在这个碎片上。当需要中央数据时,通常会将其复制到每个碎片,而不是跨碎片连接。这是APS和Azure SQL数据仓库使用的模型之一。

想了解为什么MS鼓励应用程序端连接而不是db连接。

他们谈论的是聚合查询,我认为他们暗示的是您正在连接这些结果,而不是加入它们。例如,如果客户A位于shard 1,而客户B位于shard 2,并且您希望显示客户的总销售额,则应用程序可以(甚至异步地)为客户A运行对shard 1的聚合查询,对于客户B运行对shard 2的聚合查询,并行地执行这些查询,然后将这些结果合并在一起。不能跨越碎片连接。我认为你读得太多了,说他们在鼓励它,或者说它是必要的。

如果你想要一个答案,为什么微软说了一些非常具体的方式,你将不得不问微软。我们可以帮助你解释它们的含义,甚至可以提出一些有意义的场景,但我们不能“找到”任何东西的“底端”。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/222365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档