首页 文章

在nosql vs rdbms中扩展?

提问于
浏览
3

我试图在可伸缩性的上下文中理解nosql和关系数据库中的体系结构差异 .

我对可伸缩性(水平)的理解是,随着我们的数据增长,我们添加越来越多的服务器来均匀地分配负载 .

在键值NO-SQL数据库中,我们可以添加新机器并拆分键 . 但是,到目前为止我所看到的所有示例都是为了理解NO-SQL数据库中的最终一致性,它们都具有主从配置,其中数据在所有从属服务器上复制,而不是在各种机器上进行拆分以实现可伸缩性 .

我的问题是,不使用复制整个数据会破坏No-SQL数据库的整体可扩展性?同样可以在RDBMS中完成,有一个主(用于写)和从(用于读),NO-SQL在这方面如何更具可伸缩性?

5 回答

  • 3

    可扩展性的目标是增加给定应用程序的总容量,并且可以是垂直(更大的机器)或水平(添加更多的机器) . 在涉及水平扩展时,您可以添加更多计算机,但随着计算机数量的增加,群集中节点发生故障的可能性也会增加,这是需要牢记的 .

    添加更多节点时,您可以执行的操作是拆分数据(称为 sharding ),还可以复制数据,称为 replication .

    复制

    通过复制,通常的体系结构是主从,您只能写入主服务器,主服务器将数据复制到从服务器,这意味着您不能使用复制将写入分割到集群,但可以分割读取,在一致性级别(不是所有NoSQL技术提供相同级别)和集群配置的延迟 .

    Sharding

    分片更适合提供缩放,因为如果可能,将数据集拆分为具有相似大小的多个部分 . 这显然允许将读取和写入分割到不同节点的好处 . 为了使其有效,需要 Build 一些机制:

    • routing:找到存储数据的shard,或者确定要写入哪个shard

    • balance:保持数据集的不同片段的大小,其大小随时间变化 .

    但通常这些机制由数据库供应商提供,因此无需担心提供它,但仍需要了解管理集群 .

    这里的问题是,正如我刚开始提到的,集群拥有的节点越多,在给定节点上出现故障的可能性就越高,这意味着如果具有部分数据集的节点脱机,则部分数据将不可用,这不是理想的情况 . 但幸运的是,分片和复制并不是唯一的,是否可以构建分片群集,其中每个分片都是一个群集,并且复制到位 .

    但是为了回答你的问题

    不使用复制整个数据会破坏No-SQL数据库的整体可扩展性?

    在主从架构中,您无法拆分写入,但您可以拆分读取,这有点可以扩展,但主要目的是高可用性 .

    无论如何,有新的紧急数据库开始提供多主机架构,其中所有节点都充当主节点,这意味着所有节点都可以接收,写入和读取 .

    同样可以在RDBMS中完成,有一个主(用于写)和从(用于读),NO-SQL在这方面如何更具可伸缩性?

    在单节点环境中,当涉及 JOINS 时,NoSQL已经比RDBMS快,因为它是一项昂贵的操作,或者涉及大量的完整性检查 .

    因此,当您尝试在RDBMS中对数据集进行分片时,除非经过精心设计,否则最可能出现的情况是位于不同分片中的所需数据 . 这意味着需要在不同节点之间执行JOIN和完整性检查,这使得它们比现有的操作更加昂贵 .

    这意味着RDBMS数据库使用的机制在您意图水平扩展时充当约束,NoSQL没有 . 是的,您仍然可以水平扩展RDBMS,但总体而言比使用NoSQL数据库更昂贵 .


    Update :特别提到图形数据库

    在图形数据库中进行分片确实很困难,因为从数学上讲,在不同服务器之间分配大图的问题是NP完成 . 而且,当必须在不同分片之间查询数据时,图形的一个主要特征是丢失,快速横向移动 .

    我已经看到图形数据库遵循水平扩展的两种主要方法:

    1)让应用程序/开发人员决定如何对图表进行分区,您可以想象它是多么复杂 .

    2)复制所有节点中的所有图形并使用缓存分片,这意味着所有节点都具有整个数据集,但每个节点在内存中维护特定于该节点查询最多的图形部分 .

    我想,在未来,图形数据库公司将开发更多解决方案来解决这个问题 .

    与您的问题相关,在当前状态下,由于缺乏RDBMS约束,图形数据库在水平扩展方面仍然可以超越RDBMS,但很难在不同的NoSQL数据库类型之间进行比较 .

  • 3

    NoSQL数据库中的主从配置用于 High-Avaibility 目的和数据一致性,不要与 scalability 的目的混淆,即负载 balancer 工作负载 .

  • 2

    在NoSQL中,就分割密钥而言,只有主副本才有意义 . 从属用于HA和一般可用性 . 事实上,这种复制负责最终的一致性 - 您将立即获得数据,可能不是最新的数据,但最终您将拥有更新的数据 .

    另一方面,RDBMS将具有较慢的数据访问/修改,因为它必须遵循ACID属性,并且大多数具有强一致性 .

    复制不是区分因素,因此,在NoSQL和RDBMS之间,遵守/不遵守ACID属性 . 可扩展性也不意味着没有额外的副本 . 希望得到答案 .

  • 4

    要回答您的问题,复制数据并不会破坏可扩展性 .

    Scalability 粗略地指的是增长数据库的能力,并不一定与拥有更多数据库副本有关 .

    正如其他答案所述,更多具有数据库信息的服务器允许更多用户访问它 .

    我相信这可能是 ScalabilityAvailability 之间的误解?

  • 0

    如果我们只考虑键值数据库与SQL数据库,那么前者比后者更适合可扩展性 .

    这是因为键值存储没有事务 . 因此,您唯一的保证是您可以自动更改一个键的一个值 . 这样可以轻松扩展 .

    例如,您只需对一个键进行散列并将键值对存储在与该键的哈希对应的机器上 .

    在不丢失ACID(原子性,一致性,隔离,事务持久性)属性的情况下,您无法对SQL数据库执行相同的操作 . 此外,如果在不同的计算机上存储不同的表或表的不同部分,则甚至无法轻松执行连接SELECT .

    因此,一般而言,NoSQL数据库为跨多台计算机的分片做好了准备,而不是SQL .

相关问题