数据库水平和垂直缩放之间的差异


696

我遇到过许多NoSQL数据库和SQL数据库。有各种参数可以衡量这些数据库的优缺点,而可伸缩性就是其中之一。水平和垂直缩放这些数据库有什么区别?


2
en.wikipedia.org/wiki/可伸缩性 -该术语适用于所有软件/系统
Tomasz Nurkiewicz


Answers:


1255

水平扩展意味着通过向资源池中添加更多计算机来进行扩展,垂直扩展意味着通过向现有计算机中添加更多的电源(CPU,RAM)来进行扩展

记住这一点的一种简单方法是考虑服务器机架上的计算机,我们在水平方向上添加了更多计算机,在垂直方向上添加了更多资源。

                  水平缩放/垂直缩放可视化

在数据库世界中,水平扩展通常基于数据的分区,即每个节点仅包含部分数据,在垂直扩展中,数据驻留在单个节点上,并且扩展是通过多核完成的,即在该计算机的CPU和RAM资源。

使用水平扩展时,通常可以通过在现有池中添加更多计算机来动态扩展,这很容易-垂直扩展通常限于单台计算机的容量,超出该容量的扩展通常会涉及停机时间,并且存在上限。

水平扩展的好示例是Cassandra,MongoDB,Google Cloud Spanner ..,垂直扩展的好示例是MySQL-Amazon RDS(MySQL的云版本)。通过从小型机器切换到大型机器,它提供了一种垂直扩展的简便方法。此过程通常涉及停机时间。

内存数据网格(例如GigaSpaces XAPCoherence等)通常仅由于未绑定到磁盘而针对水平和垂直缩放进行了优化。通过分区进行水平扩展,并通过多核支持进行垂直扩展。

您可以在我的早期文章中阅读有关此主题的更多信息: 横向扩展纵向扩展以及NOSQL替代方案背后的通用原则


1
还有Couchbase,Riak,HBase,CitrusLeaf和Infinispan,以进一步完善列表(还有更多)。
scalabl3 2012年

3
@Nati Shalom NOSQL数据库是水平扩展的吗?
虎山Firake 2012

2
@BillyMoon我听说Mysql Galera可能实现这种情况
Sam Stoelinga 2014年

9
我在这里有点困惑...添加更多的机器实际上与添加更多的cpu / ram是相同的..那么两者的区别是什么,因为当我们添加一台新计算机时,它附带cpu和ram,如果我是错的。
Subham Tripathi 2015年

8
@SubhamTripathi如此处所述,垂直扩展仅限于一台服务器(或一小组服务器),并且有实际上限(这意味着您不能超出512 GB的RAM)。另一方面,水平缩放实际上可以无限期地发生。
ass 2015年

197

水平缩放===>成千上万的奴才将为您共同完成工作。

垂直缩放===>一个庞大的工作将为您完成所有工作。


20

让我们从扩展资源的需求开始,这样您的系统现在可以处理比以前更多的请求。

当您发现系统变慢并且无法处理当前请求数时,您需要扩展系统。

这为您提供了两种选择。您可以增加当前正在使用的服务器中的资源,即增加RAM,CPU,GPU和其他资源的数量。这称为垂直缩放。

垂直缩放通常很昂贵。它不会使系统具有容错能力,即,如果要扩展使用单个服务器运行的应用程序,则如果该服务器发生故障,则系统将发生故障。同样,线程数量在垂直缩放中保持不变。垂直扩展可能会要求您的系统在发生过程时暂时中断。服务器上资源的增加需要重新启动,并使系统停机。

解决此问题的另一种方法是增加系统中存在的服务器数量。该解决方案在技术行业中得到了广泛使用。这最终将降低每个服务器中每秒请求的速率。如果需要扩展系统,只需添加另一台服务器即可。您不需要重新启动系统。每个系统中的线程数减少,从而导致高吞吐量。为了将请求均等地隔离到每个应用程序服务器,您需要添加负载均衡器,该负载均衡器将充当Web服务器的反向代理。整个系统可以称为单个集群。您的系统可能包含大量请求,这将需要更多这样的集群。

希望您了解将缩放引入系统的整个概念。


9

没有提到的其他架构是基于SQL的数据库服务,它可以实现水平扩展,而无需手动分片。这些服务在后台进行分片,因此它们使您能够运行传统的SQL数据库并像使用MongoDB或CouchDB这样的NoSQL引擎进行扩展。我熟悉的两个服务是PostgreSQL的EnterpriseDB和MySQL的Xeround。我看过Xeround的一篇深入的文章,其中解释了为何难以扩展SQL数据库以及它们如何以不同的方式进行处理-因为这是供应商的文章,所以要一针见血。另请查阅Wikipedia的Cloud Database条目,其中有SQL,NoSQL和服务与自托管的很好的解释,每种组合的供应商列表和扩展选项。;)


作为另一个数据点,我从Clustrix提交了另一个供应商的帖子:clustrix.com/blog/bid/259950/scale-up-vs-scale-out
clieu 2013年

Amazon RDS怎么样?
Raja Nagendra Kumar 2015年

1
我知道这是一个旧帖子...只是一些更新.. Xeround已关闭商店。PostreSQL的水平扩展选项并不是真正的水平扩展选项,它们只是数据库复制选项,您可以在其中生成对复制的数据库的某些操作。
Dharmendar Kumar'DK'18年

8

是的,水平扩展意味着增加更多的计算机,但这也意味着集群中的计算机是相等的。MySQL可以通过使用副本在读取数据方面进行横向扩展,但是一旦达到服务器内存/磁盘的容量,就必须开始在服务器之间分片数据。这变得越来越复杂。由于复制速度通常太慢而无法跟上数据更改速度,因此经常使副本之间的数据保持一致是一个问题。

Couchbase还是一个出色的NoSQL Horizo​​ntal Scaling数据库,用于许多商业高可用性应用程序和游戏中,并且可以说是同类产品中性能最高的。它可以跨集群自动对数据进行分区,添加节点非常简单,并且您可以使用商品硬件,更便宜的vm实例(例如,在AWS上使用Large而不是High Mem,High Disk计算机)。它基于Membase(Memcached)构建,但是增加了持久性。同样,对于Couchbase,每个节点都可以执行读写操作,并且在群集中是平等的,仅使用故障转移复制即可(不像mySQL那样跨所有服务器进行完整的数据集复制)。

在性能方面,您可以看到出色的Cisco基准测试:http : //blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server

这是有关Couchbase体系结构的精彩博客文章:http : //horicky.blogspot.com/2012/07/couchbase-architecture.html


6

传统的关系数据库被设计为客户端/服务器数据库系统。它们可以水平缩放,但是这样做的过程往往很复杂并且容易出错。像NuoDB这样的NewSQL数据库是以内存为中心的分布式数据库系统,旨在在保持传统RDBMS的SQL / ACID属性的同时水平扩展。

有关NuoDB的更多信息,请阅读其技术白皮书


5

像Oracle,db2这样的SQL数据库还支持通过共享磁盘集群进行水平扩展。例如,Oracle RAC,IBM DB2 purescale或Sybase ASE Cluster版本。可以将新节点添加到Oracle RAC系统或DB2 purescale系统中,以实现水平扩展。

但是该方法与noSQL数据库(例如mongodb,CouchDB或IBM Cloudant)不同,在于数据分片不是水平扩展的一部分。在noSQL数据库中,在水平扩展过程中会共享数据。


1

您有一家公司,只有1名工人,但是那时您雇用了一个新候选人,却有一个新项目-这是水平扩展。新候选人是新机器,项目是新流量/对api的调用。

其中作为一个项目,有一个IIT / NIT家伙处理对您的api /流量的所有请求。如果有更多时间向您的api请求,则将其解雇,并用智商高的NIT / IIT家伙代替他-这是垂直缩放。


0

添加大量负载平衡器会产生额外的开销和延迟,这是在nosql数据库中横向扩展的缺点。这就像一个问题,为什么人们不建议使用RPC,因为它不可靠。

我认为在实际系统中,我们应该同时使用sql和nosql数据库来利用当今系统的多核和云计算功能。

另一方面,如果使用oracle等sql数据库,则复杂的事务查询具有较高的性能。通过分片,NoSql可用于大数据和水平可伸缩性。


0

公认的答案是关于水平缩放与垂直缩放的基本定义。但是,与通常的看法不同,即只能通过Cassandra,MongoDB等来实现数据库的水平扩展,我想补充一下,对于任何传统的RDMS,也可以进行水平扩展。也无需使用任何第三方解决方案。

我知道许多公司,特别是基于SaaS的公司都在这样做。使用简单的应用程序逻辑即可完成。基本上,您需要一组用户,并将他们划分到多个数据库服务器上。因此,例如,您通常会有一个“元”数据库/表,用于存储客户端,DB服务器/连接字符串等,以及一个表,用于存储客户端/服务器映射。

然后,将每个客户端的请求直接定向到它们所映射到的DB服务器。

现在有人可能说这类似于水平分区,而不是“真正的”水平缩放,并且它们在某些方面是正确的。但是最终结果是您已经在多个Db服务器上扩展了数据库。

两种水平扩展方法之间的唯一区别是,一种方法(MongoDB等)的扩展是由DB软件本身完成的。从这个意义上讲,您正在“购买”缩放比例。在另一种方法中(对于RDBMS水平缩放),缩放由应用程序代码/逻辑构建。

购买与构建

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.