提问



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

最佳参考


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


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


                  [1]


在数据库世界中,水平扩展通常基于数据的划分,即每个节点仅包含部分数据,在垂直扩展中,数据驻留在单个节点上,并且通过多核进行扩展,即在两者之间扩展负载。该机器的CPU和RAM资源。


通过水平扩展,通过在现有池中添加更多计算机来动态扩展通常更容易 - 垂直扩展通常仅限于单个计算机的容量,超出该容量的扩展通常涉及停机时间并且具有上限。


水平扩展的很好例子是Cassandra,MongoDB,Google Cloud Spanner ..而垂直扩展的一个很好的例子是MySQL - Amazon RDS(MySQL的云版本)。通过从小型机器切换到更大型机器,它提供了一种简单的垂直扩展方式。这个过程通常涉及停机时间。[2]


内存数据网格(如GigaSpaces XAP,Coherence等)通常针对水平和垂直缩放进行了优化,因为它们不会绑定到磁盘上。通过分区进行水平扩展,通过多核支持进行垂直扩展。[3] [4]


您可以在我之前的帖子中阅读有关此主题的更多信息:
横向扩展与扩大规模以及NOSQL替代方案背后的共同原则[5] [6]

其它参考1


水平可伸缩性是通过连接多个硬件或软件实体来增加容量的能力,以便它们作为单个逻辑单元工作。


当服务器群集时,原始服务器将水平扩展。如果群集需要更多资源来提高性能并提供高可用性(HA),则管理员可以通过向群集添加更多服务器来扩展。


横向可伸缩性的一个重要优势是它可以为管理员提供动态增加容量的能力。另一个优点是理论上,水平可扩展性仅受成功连接的实体数量的限制。例如,分布式存储系统Cassandra运行在遍布不同数据中心的数百个商品节点之上。由于商用硬件是水平扩展的,因此Cassandra具有容错能力,并且没有单点故障(SPoF)。


另一方面,垂直可伸缩性通过向机器添加更多资源(例如更多内存或额外CPU)来增加容量。垂直扩展(也称为扩展)通常需要在添加新资源时停机,并且具有由硬件定义的限制。例如,当Amazon RDS客户需要垂直扩展时,他们可以从较小的机器切换到更大的机器,但亚马逊最大的RDS实例只有68 GB的内存。


水平缩放既有优点也有缺点。例如,乍一看将廉价商品计算机添加到群集似乎是一种经济高效的解决方案,但管理员知道这些额外服务器的许可成本,供电和冷却的额外运营成本是非常重要的。它们在数据中心占据的大量占用空间确实使得水平扩展成为比垂直扩展更好的选择。

其它参考2


还有一个额外的体系结构没有提到 - 基于SQL的数据库服务可以实现水平扩展而不需要手动分片的复杂性。这些服务在后台进行分片,因此它们使您能够运行传统的SQL数据库并像你会使用像MongoDB或CouchDB这样的NoSQL引擎。我熟悉的两个服务是用于PostgreSQL的EnterpriseDB和用于MySQL的Xeround。我看到Xeround的一篇深度帖子解释了为什么SQL数据库的横向扩展很难以及它们是如何做到的不同的是 - 因为它是一个供应商的帖子,所以请查看维基百科的云数据库条目,有一个很好的解释SQL与NoSQL和服务与自托管,供应商列表和扩展每种组合的选项。 ;)[7] [8] [9] [10]

其它参考3


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


Couchbase也是一个出色的NoSQL Horizo​​ntal Scaling数据库,用于许多商业高可用性应用程序和游戏,可以说是该类别中性能最高的。它跨群集自动分区数据,添加节点很简单,您可以使用商用硬件,更便宜的虚拟机实例(例如,使用大而不是高内存,高级硬盘机器)。它是根据Membase(Memcached)构建的,但增加了持久性。此外,在Couchbase的情况下,每个节点都可以执行读取和写入,并且在集群中是相同的,只有故障转移复制(不是像mySQL中的所有服务器上的完整数据集复制)。


在性能方面,您可以看到一个优秀的思科基准:http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server [11]


这是一篇关于Couchbase Architecture的精彩博文:http://horicky.blogspot.com/2012/07/couchbase-architecture.html [12]

其它参考4


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


有关NuoDB的更多信息,请阅读http://goo.gl/uzLIWB上的技术白皮书。 [13]

其它参考5


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


当您意识到,您的系统变慢,并且无法处理当前的请求数时,您需要扩展系统。


这为您提供了两个选项,您可以增加当前使用的服务器中的资源,即增加ram,cpu,gpu和其他资源的数量。这称为垂直缩放。


垂直缩放通常很昂贵。
它不会使系统容错,即如果您正在使用单个服务器扩展应用程序,如果该服务器出现故障,您的系统将会关闭。
此外,垂直缩放中的线程数量保持不变。
垂直缩放可能需要系统在进程发生时停止工作。增加服务器上的资源需要重新启动并关闭系统。


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


希望您获得将缩放引入系统的整个概念

其它参考6


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


但该方法与noSQL数据库(如mongodb,CouchDB或IBM Cloudant)的不同之处在于数据分片不是水平扩展的一部分。在noSQL数据库中,数据在水平扩展期间被擦除。

其它参考7


所有其他答案似乎已经相当完整,但我没有看到Google Cloud Spanner作为具有水平扩展的关系数据库的示例,这就是为什么我要添加我的小贡献。[14]

其它参考8


添加大量负载平衡器会产生额外的开销和延迟,这是在nosql数据库中横向扩展的缺点。这就像为什么人们说RPC不推荐,因为它不健壮。


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


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