Database 什么是切分,为什么它很重要?

Database 什么是切分,为什么它很重要?,database,terminology,Database,Terminology,我想我理解切分就是将切分的数据(切分)放回一个易于处理的聚合中,在上下文中是有意义的。这是正确的吗 更新:我想我在这里挣扎。在我看来,应用层不应该决定数据应该存储在哪里。充其量应该是某种类型的碎片客户端。两个回答都回答了what,但没有回答why is it important方面的问题。除了明显的性能提升之外,它还有什么影响?这些收益是否足以抵消MVC违规?切分在超大规模的应用程序中最重要,还是适用于小规模的应用程序?如果您对DBMS有查询,且其位置非常有限(例如,用户仅使用“where us

我想我理解切分就是将切分的数据(切分)放回一个易于处理的聚合中,在上下文中是有意义的。这是正确的吗


更新:我想我在这里挣扎。在我看来,应用层不应该决定数据应该存储在哪里。充其量应该是某种类型的碎片客户端。两个回答都回答了what,但没有回答why is it important方面的问题。除了明显的性能提升之外,它还有什么影响?这些收益是否足以抵消MVC违规?切分在超大规模的应用程序中最重要,还是适用于小规模的应用程序?

如果您对DBMS有查询,且其位置非常有限(例如,用户仅使用“where username=$my_username”激发选择)将所有以A-M开头的用户名放在一台服务器上,将所有以N-Z开头的用户名放在另一台服务器上是有意义的。通过这种方式,您可以对某些查询进行近似线性的缩放

长话短说:切分基本上是将表分布到不同服务器上的过程,以便平衡两台服务器上的负载


当然,事实上要复杂得多

分片只是数据库“水平分区”的另一个名称。您可能希望搜索该术语以使其更清晰

发件人:

水平分区是一种设计原则,其中数据库表的行是分开保存的,而不是按列分割(用于规范化)。每个分区构成一个分片的一部分,分片可以位于单独的数据库服务器或物理位置。优点是减少了每个表中的行数(这减少了索引大小,从而提高了搜索性能)。如果分片基于数据的某些真实方面(例如欧洲客户与美国客户),则可以轻松自动地推断出适当的分片成员资格,并仅查询相关分片

有关分片的更多信息:

首先,每个数据库服务器都是相同的,具有相同的表结构。其次,数据记录在分片数据库中进行逻辑分割。与分区数据库不同,每个完整的数据记录只存在于一个碎片中(除非存在备份/冗余镜像),所有CRUD操作都只在该数据库中执行。您可能不喜欢使用的术语,但这确实代表了将逻辑数据库组织成更小部分的另一种方式

更新:您不会破坏MVC。确定存储数据的正确碎片的工作将由数据访问层透明地完成。在这里,您必须根据用于共享数据库的标准来确定正确的共享。(因为必须根据应用程序的某些具体方面手动将数据库分片到一些不同的分片中。)然后,在从数据库加载数据或将数据存储到数据库中时,必须小心使用正确的分片

也许用Java代码可以让它更清楚一些(这是关于项目的),这在现实世界中是如何工作的

要解决“
为什么分片”
”:它主要只适用于具有大量数据的大规模应用程序。首先,它有助于最小化数据库查询的响应时间。其次,您可以使用更便宜的“低端”计算机来承载您的数据,而不是一台大型服务器,这可能已经不够了

切分在非常重要的情况下最重要吗 大规模应用程序,还是这样 适用于小规模的

当且仅当您的需求超出单个数据库服务器所能满足的范围时,切分才是一个问题。如果您有可共享的数据,并且具有极高的可扩展性和性能要求,那么它将是一个很棒的工具。我想在我从事软件专业的整整12年中,我遇到了一个可以从切分中获益的情况。这是一种先进的技术,适用性非常有限

此外,未来可能会是一些有趣和令人兴奋的事情,比如一个巨大的对象“云”,它消除了所有潜在的性能限制,对吗?:)

在我看来,应用层 应该没有必要决定 数据应该存储在哪里

这是一条很好的规则,但像大多数事情一样,并不总是正确的

当您进行架构设计时,首先要进行责任和协作。一旦确定了功能架构,就必须平衡非功能性力量


如果这些非功能性力量之一是巨大的可伸缩性,你必须调整你的架构以适应这种力量,即使这意味着你的数据存储抽象现在泄露到你的应用层。

切分最初是由谷歌工程师创造的,你可以看到它在谷歌应用程序引擎上编写应用程序时被大量使用。由于您的查询可以使用的资源量有严格的限制,而且查询本身也有严格的限制,所以体系结构不仅鼓励切分,而且几乎强制切分

可以使用分片的另一个地方是减少数据实体上的争用。在构建可伸缩系统时,尤其要注意那些经常写入的数据,因为它们始终是瓶颈。一个好的解决方案是切分特定的实体,并写入多个副本,然后读取总数。这种“分片计数器”的一个例子是:

分片是水平()数据库分区,而不是垂直()分区,即规范化。它将非常大的数据库分成更小、更快、更易于管理的部分,称为数据碎片。它是实现分布式系统的一种机制

为什么我们需要分布式系统?

    <