我遇到过许多NoSQL数据库和SQL数据库。有不同的参数来衡量这些数据库的强弱,可伸缩性就是其中之一。横向和纵向缩放这些数据库有什么区别?


当前回答

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

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

其他回答

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

当你意识到你的系统越来越慢,无法处理当前的请求数量时,你需要调整系统。

这为您提供了两个选项。要么增加当前使用的服务器中的资源,即增加RAM、CPU、GPU和其他资源的数量。这就是所谓的垂直缩放。

垂直缩放通常代价高昂。它不会使系统具有容错性,即,如果您正在扩展使用单个服务器运行的应用程序,如果该服务器停机,您的系统将停机。在垂直缩放中,线程数量也保持不变。当过程发生时,垂直缩放可能需要系统暂时停止。增加服务器上的资源需要重新启动并关闭系统。

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

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

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

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

还有一个没有提到的额外架构——基于SQL的数据库服务,它支持水平扩展,而不需要手动分片的复杂性。这些服务在后台进行分片,因此它们使您能够运行传统的SQL数据库,并像使用MongoDB或CouchDB等NoSQL引擎一样进行扩展。我熟悉的两个服务是EnterpriseDB for PostgreSQL和Xeround for MySQL。我看到了Xeround的一篇深入文章,它解释了为什么SQL数据库的扩展很困难,以及它们如何以不同的方式进行扩展——用一点盐来看待这一点,因为这是一篇供应商文章。还可以查看维基百科的云数据库条目,其中对SQL与NoSQL以及服务与自托管进行了很好的解释,列出了每种组合的供应商和扩展选项

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

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

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

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

但这种方法与noSQL数据库(如mongodb、CouchDB或IBMCloudant)的不同之处在于,数据分片不是水平缩放的一部分。在noSQL数据库中,数据在水平缩放期间被碎片化。