部分复制和分片的区别是什么?

3
我在想分片是否是部分复制的另一个名称。根据我所了解到的--
部分复制 - 每个数据项仅在一些节点上具有副本(“分片”?)
纯部分复制 - 仅具有数据项子集的副本,但没有节点包含数据库的完整副本
混合部分复制 - 一组节点是完全副本,另一组节点是部分副本
2个回答

4
部分复制是一种有趣的方式,您可以使用主从复制来分发数据,每个从库都包含一部分数据。最终您会得到一个只读的小型数据库数组,每个数据库都包含一部分数据。读操作可以很好地进行分布和并行化。
但写操作呢?
这些仍然被拖延在一个大而懒惰的主数据库中,缓冲管理、锁定、线程锁/信号量和恢复任务等任务是 OLTP 的真正瓶颈,它们使得写操作无法扩展…… 在我的博客文章中了解更多信息:http://database-scalability.blogspot.com/2012/08/scale-up-partitioning-scale-out.html。顺便说一句,你提出的问题给了我另一个好点子,我会链接到这个问题并给你以荣誉!:)
分片是数据仅出现一次,在一组数据库中的情况。每个数据库都完全拥有数据,数据从那里读取,数据写入那里。这样,读和写操作就可以分布和并行化。真正的扩展性可以得到实现。
分片处理起来非常麻烦,难度极大。ScaleBase(我在那里工作)支持自动透明的扩展,只需将其放在中间,您将在后面得到 10 个数据库,而对于您的应用程序来说,它看起来像是一个数据库。自动、透明的超级分片 - 一盒搞定。

嗨Doron,感谢您的回复...只是想根据最近几天的阅读增加一些话: 分片是将数据库水平或垂直拆分为多个分区的机制,这些分区可以分布在多个独立节点上。我认为如果我们也复制单个分片,则可以将其视为纯部分复制的示例。现在,许多NoSQL系统提供基于选择的分片键的主要水平分割,旨在提供良好的读取和写入可扩展性,如果能够设计应用程序逻辑的话。 - Joarder Kamal
然而,我猜在分片的应用逻辑管理方面,事务类型和工作负载模式是预先知道的,这在某种意义上更加困难。然后我们必须省略分布式事务,因为它们可能会访问不同的分片进行单个操作,并且如果使用异步复制,则会产生不一致的读取。似乎,在1)分片(具有复制-纯部分复制)和完全复制之间;2)异步和同步更新传播之间始终存在几种权衡。阅读http://danweinreb.org/blog/improving-the-pacelc-taxonomy 是值得的。 - Joarder Kamal

3
分片是一种对表进行水平分割的方法。它与复制无关。
传统上,RDBMS服务器位于系统中心,具有星形拓扑结构。因此,它成为:
1. 单点故障 2. 系统性能瓶颈
为了解决问题#1,您可以使用复制:如果原始服务器死亡,则故障切换到副本。
为了解决问题#2,您可以采取以下措施:
1. 使用分片技术 1.1 自己进行分片 1.2 使用RDBMS的“开箱即用”集群机制 2. 迁移到NoSQL解决方案
分片允许您通过将数据分散在多个服务器之间来扩展数据库。但是,分片是一种权衡。它限制了您在数据连接/相交等方面的灵活性。
如果您使用分片,仍然会遇到问题#1。因此,复制分片节点是一个好习惯。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接