代码之家  ›  专栏  ›  技术社区  ›  Bryan Ward

当可伸缩性不相关时nosql与sql的比较

  •  23
  • Bryan Ward  · 技术社区  · 14 年前

    最近我读了很多关于不同nosql数据库的文章,以及一些主要网站如何有效地部署它们。我正在启动一个项目,在这个项目中,我认为像mongodb这样的数据库的无模式特性将非常有用。我读到的所有内容似乎都表明nosql数据库的主要优点是可伸缩性。为无模式设计选择nosql数据库是否与可伸缩性的设计决策一样合法?

    5 回复  |  直到 8 年前
        1
  •  14
  •   g_g    14 年前

    是的,有时候RDBMS不是最好的解决方案,尽管有一些方法可以容纳用户定义的字段(参见XML数据类型、EAV设计模式或只是有备用的泛型列),有时候无模式数据库是一个不错的选择。

    然而,在选择使用文档数据库之前,您需要确定您的需求,因为您将失去许多在关系模型中可能使用的功能

    如。。。

    如果您的rdbms数据库中有多个表,那么您需要研究mongodb为您提供的特性,以满足这些需求。

    如果您需要以特定的方式查询数据,同样需要研究MongoDB为您提供了什么。

    我不认为nosql是rdbms的替代品,而是一个稍微不同的工具,它带来了自己的优点和缺点,使它更适合一些项目。

    (这两个数据库在某些情况下都可以使用。另外,如果您决定继续使用MongoDB,一旦您研究了外面的网站并有了更具体的问题,您可以访问Freenode IRC MongoDB频道)

        2
  •  3
  •   mezmo    14 年前

    对于非关系系统和关系系统,还有很多其他条件我都听说过。与sql/no-sql相比,我更喜欢这个术语,因为我个人认为它更好地描述了这些差异,而且一些“no-sql”服务器有sql附加组件,所以无论如何……系统中需要哪种并发模式或事务隔离。rel数据库和非rel数据库之间所谓的区别之一是“始终一致”、“大部分一致”或“最终一致”。默认情况下,关系数据库通常属于“一致的大多数”类别,并且有一些工作,并且有很多锁定和竞争条件,;)可以是“一致的总是”,因此每个人总是在寻找给定数据块的最正确表示。我读到/听说的关于非rel数据库的大部分内容是,它们主要是“最终一致的”。这意味着我们的数据可能会有很多实例浮动,因此用户“a”可能会看到库存中有92个窗口小部件,而用户“b”可能会看到79个窗口小部件,在有人真正从仓库中提取数据之前,它们可能无法协调。另一个问题是数据的可变性,它需要多久更新一次?我发现特定的非rel数据库的更新开销更大,其中一些需要重新生成整个数据集以合并任何更新。

    现在请注意,我认为非rel/nosql是非常好的工具,如果它们真的符合您的用例的话。我有好几个我正在调查的项目,我有。但在做决定时,你必须考虑所有的权衡,否则它只会变成更受简历驱动的发展。

        3
  •  2
  •   Sunil Guttula    14 年前

    我不认为您应该选择nosql数据存储来进行无模式设计。基于xml的rdbms中一直存在无模式设计,一些数据库具有良好的xml支持。处理数据库比处理nosql数据存储要容易得多。可伸缩性和大数据应该是选择nosql数据存储的主要驱动因素,否则acid和sql的折衷就很难切换到nosql。

        4
  •  1
  •   Kronass    14 年前

    引发这个问题的原因是,如果您有一个大型服务器场,并且需要管理数据的分发和负载平衡,那么使用RDBMS实现这些数据和负载平衡将更加困难,并且需要很高的IT技能来为您的解决方案设计、计划和部署(但性能仍然较低)。 但如果只有3或4台服务器的小项目。我认为你对此没有意见。nosql数据库通常被认为是大型服务器场而不是少数服务器

        5
  •  1
  •   Mhd Wael Jazmati    8 年前

    最重要的是要注意区分无sql和sql 这是: 当数据库以社交网络等巨大方式扩展时,no-sql非常有用 例如: 堆栈溢出:每个问题都有多个答案,而不是假想的没有问题的答案,因此没有sql可以确保每个问题都包含它的答案 因此,当需要得到某个问题的答案时,我们可以不加入就带来所有的答案。因为加入是相关数据库中最昂贵的查询 多谢