首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用水平分区,何时使用数据库分片?

何时使用水平分区,何时使用数据库分片?
EN

Stack Overflow用户
提问于 2014-06-01 08:01:54
回答 2查看 11.2K关注 0票数 8

我正在维基百科上阅读这篇文章:(建筑)试图找出这两种技术之间的主要区别。以下是我的发现:

水平分区按行拆分一个或多个表,通常在架构和数据库服务器的单个实例中。它可以通过减少索引大小(从而减少搜索工作量)提供一种优势,前提是有一些明显的、健壮的、隐式的方法来识别将在哪个表中找到特定行,而无需首先搜索索引,例如,“CustomersEast”和“CustomersWest”表的经典示例,其中它们的邮政编码已经指示将在何处找到它们。 切分超越了这一点:它以同样的方式对有问题的表进行分区,但是它可以在模式的多个实例中这样做。明显的优点是,大型分区表的搜索负载现在可以跨多个服务器(逻辑或物理),而不仅仅是同一逻辑服务器上的多个索引。

据我所知,水平分区更适用于单个实例(单节点环境),而分片则用于多节点/多数据中心环境。这是正确的吗?还是有不同的使用场景?

额外的问题:对于一个拥有简单模式(大约4-5列)的大型表(数百万行),提高这个表的读/写性能的最佳技术是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-06-01 16:20:44

您是正确的,水平分区(例如,在MySQL和PostgreSQL中支持)将一个表拆分到一个服务器中。这可以提高性能,因为数据和索引可以在多个磁盘卷中拆分,从而改进I/O。这通常是通过一个关键范围来完成的。

使用数据库分块,您可以将数据划分到多个服务器上,而不仅仅是在一个服务器中。在这种情况下,您使用一个切分键来划分数据,通常使用某种哈希算法。您可以在这里得到一份关于这个主题的白皮书(由我们公司提供,它不是专门针对任何产品,它解释了技术):http://www.codefutures.com/database-sharding-white-paper/

DBMS单服务器分区的优点是设置和管理相对简单。缺点是,最终您受到单个服务器所能做的限制。对于严重的写争用、数据库锁定和大量查询,情况尤其如此。

数据库切分需要更多的工作,但是它的优点是没有共享,因此它是完全可伸缩的。

需要数据库分片的一个明确指示是,单个服务器无法跟上写入量。如果您有大量的查询,这也可以驱动对这种类型的解决方案的需求。

尽管如此,如果您正在谈论的是具有4-5列的“数百万”行,并且您的读取可以很好地索引以便快速访问,那么您是否需要实现这些选项中的任何一种都是值得怀疑的。当您谈论的是数以百万或数十亿行、拥有1000s用户的1000行时,这就是数据库可伸缩性的关键所在。

还有一个关于数据库可伸缩性的信息网站:www.bigdatascalability.com。它包括到各种文章的链接,并将增加新的内容随着时间的推移。

票数 11
EN

Stack Overflow用户

发布于 2014-06-02 14:41:58

分区和切分之间的区别是正确的。我建议你读一篇我写的关于这个主题的文章:扩展,分区,扩展

另一个很好的帖子可以在这里找到:"MySQL分区:权宜之计“(免责声明:我为ScaleBase工作)

分区解决了一些大小挑战和从表中读取数据,但切分是真正解决大型数据库的所有方面的唯一方法,包括读写和并发以及数据库实例的维护(备份、复制等)。还有其他人。

虽然现代数据库(通常是NoSQL)(比如MongoDB )提供了这种能力,但在MySQL中,它曾经是“自己动手”的议程.ScaleBase是一个完整的规模化解决方案的制造商,如果你愿意的话,它是一台“自动切分机”。ScaleBae分析您的数据和SQL流,在运行时将数据拆分到DB节点、路由命令和聚合结果--所以您不必这么做!

希望能帮上忙!

多伦

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

https://stackoverflow.com/questions/23977850

复制
相关文章

相似问题

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