当可扩展性无关紧要时,NoSQL 与 SQL
Posted
技术标签:
【中文标题】当可扩展性无关紧要时,NoSQL 与 SQL【英文标题】:NoSQL vs. SQL when scalability is irrelevant 【发布时间】:2010-03-28 20:25:07 【问题描述】:最近我阅读了很多关于不同 NoSQL 数据库以及它们如何被一些主要网站有效部署的文章。我正在开始一个项目,我认为 MongoDB 等数据库的无模式特性将非常有用。我读过的所有内容似乎都表明 NoSQL 数据库的主要优势是可扩展性。为无模式设计选择 NoSQL 数据库是否与可扩展性一样合理?
【问题讨论】:
它不是您问题的答案,但阅读文章和 cmets 可能仍然很有趣:developers.slashdot.org/story/10/03/28/1432234/… 这并不是什么新鲜事,Berkeley DB 本质上是一个永远存在的键值存储。明智地选择你的工具。 【参考方案1】:是的,有时 RDBMS 不是最好的解决方案,尽管有一些方法可以容纳用户定义的字段(请参阅 XML 数据类型、EAV 设计模式,或者只是有备用的通用列),有时无模式数据库是一个不错的选择。
但是,在选择使用文档数据库之前,您需要确定您的需求,因为您可能会失去很多您可能习惯于使用关系模型的功能
例如...
如果您的 RDBMS 数据库中有多个表,则需要研究 MongoDB 为您提供的满足这些需求的功能。
如果您需要以特定方式查询数据,那么您需要再次研究 MongoDB 为您提供的功能。
我不会将 NoSQL 视为 RDBMS 的替代品,而是一种略有不同的工具,它带来了自己的一系列优点和缺点,使其比其他项目更适合某些项目。
(在某些情况下可能会使用这两种数据库。另外,如果您决定走下可能使用 MongoDB 的路线,一旦您研究了那里的网站并有更具体的问题,您可以访问 Freenode IRC #mongodb 频道)
【讨论】:
别忘了考虑您需要在数据库中执行的报告。人们经常为应用程序选择工具,却忘记了需要对许多事情进行管理报告。【参考方案2】:我听说过很多关于非关系系统与关系系统的其他情况。我更喜欢这个术语而不是 sql/no-sql,因为我个人认为它更好地描述了差异,并且一些“no-sql”服务器具有 sql 附加组件,所以无论如何......什么样的并发模式或事务隔离在您的系统中是必需的。 rel 和非 rel dbs 之间据称的区别之一是“始终一致”、“始终一致”或“最终一致”。默认情况下,关系数据库通常属于“大部分一致”类别,并且需要一些工作,以及大量锁定和竞争条件,;) 可以是“始终一致”,因此每个人都在寻找最正确的表示给定的数据。我读过/听说过的关于 non-rel dbs 的大部分内容是它们主要是“最终一致的”。这意味着我们的数据可能有很多实例浮动,因此用户“A”可能会看到我们在库存中有 92 个小部件,而用户“B”可能会看到 79 个,并且他们可能不会在有人真正去之前达成和解从仓库拉东西。另一个问题是数据的可变性,它需要多久更新一次?我发现特定的非 rel db 有更多的更新开销,其中一些必须重新生成整个数据集以合并任何更新。
现在请注意,如果 non-rel/nosql 真正符合您的用例,我认为它们是很棒的工具。我有几个我现在正在研究的项目。但是你在做决定时必须考虑所有的权衡,否则只会变成更多的简历驱动的开发。
【讨论】:
【参考方案3】:我认为您不应该选择 NoSQL 数据存储来进行无模式设计。无模式设计一直存在于通过 XML 的 RDBMS 中,并且一些数据库具有良好的 XML 支持。处理数据库比处理 NoSQL 数据存储要容易得多。可扩展性和大数据应该是选择 NoSQL 数据存储的主要驱动因素,否则 ACID 和 SQL 的权衡很大,要切换到 NoSQL。
【讨论】:
【参考方案4】:要注意区分No-SQL和SQL的最重要的事情 这是: 当数据库以社交网络等巨大方式扩展时,NO-SQL 很有用 例如 : Stack Overflow:每个问题都有多个答案,而不是想象一个没有问题的答案,因此 No-SQL 将确保每个问题都包含它的答案 因此,当需要获得问题的答案时,我们可以在不加入的情况下带来所有答案。因为加入是相关数据库中最昂贵的查询 非常感谢
【讨论】:
【参考方案5】:是什么引发了这个问题,如果您有一个大型服务器场,并且需要管理您的数据分布和负载平衡,那么使用 RDBMS 实施这将更加困难和困难,并且需要高 IT 技能来设计、规划和部署您的解决方案(并且性能仍然较低)。 但是如果您只有 3 或 4 台服务器和小型项目。我不认为你有这方面的问题。 NoSQL 数据库通常在大型服务器场而不是少量服务器中考虑
【讨论】:
以上是关于当可扩展性无关紧要时,NoSQL 与 SQL的主要内容,如果未能解决你的问题,请参考以下文章