首页 文章

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

提问于
浏览
501

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

9 回答

  • 890

    简单来说

    水平缩放===>成千上万的爪牙一起为你做的工作

    垂直缩放===>一个大的巨人将完成所有工作或你 .

  • 8

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

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

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

  • 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作为具有水平缩放的关系数据库的示例,这就是为什么我要添加我的小贡献 .

  • 6

    Horizontal scaling means that you scale by adding more machines 进入您的资源池,而 Vertical scaling means that you scale by adding more power (CPU, RAM) to an existing machine .

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

    Horizontal Scaling/Vertical Scaling Visualisation

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

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

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

    内存数据网格(例如GigaSpaces XAPCoherence等)通常针对水平和垂直缩放进行了优化,因为它们没有绑定到磁盘 . 通过多核支持进行分区和垂直扩展的水平扩展 .

    您可以在我之前的帖子中阅读有关此主题的更多信息:Scale-out vs Scale-upThe Common Principles Behind the NOSQL Alternatives

  • 6

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

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

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

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

  • 3

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

    有关NuoDB的更多信息,请阅读他们的技术白皮书http://goo.gl/uzLIWB .

  • 5

    让我们开始吧需要进行扩展以增加资源,以便您的系统现在可以处理比以前更多的请求 .

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

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

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

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

    希望您获得将扩展引入系统的整个概念 .

  • 0

    还有一个未提及的额外体系结构 - 基于SQL的数据库服务,可实现水平扩展,而无需手动分片的复杂性 . 这些服务在后台进行分片,因此它们使您能够像使用MongoDB或CouchDB等NoSQL引擎一样运行传统的SQL数据库并进行扩展 . 我熟悉的两个服务是PostgreSQL的EnterpriseDB和MySQL的Xeround . 我在Xeround中看到了一个深入的post,它解释了为什么SQL数据库的横向扩展很难以及它们如何以不同的方式做到这一点 - 因为它是一个供应商帖子,所以要处理这个问题 . 另请查看Wikipedia的Cloud Database entry,有一个很好的解释SQL与NoSQL和服务与自托管,供应商列表和每个组合的扩展选项 . ;)

相关问题