最近我已经阅读了很多关于不同NoSQL数据库以及它们如何被一些主要网站有效部署的内容。我正在开始一个项目,我认为像MongoDB这样的数据库的无模式特性非常有用。我读过的所有内容似乎都表明NoSQL数据库的主要优点是可扩展性。是否为无架构设计选择NoSQL数据库,就像可扩展性的设计决策一样合理?
答案 0 :(得分:14)
是的,有时RDBMS不是最好的解决方案,尽管有方法可以容纳用户定义的字段(请参阅XML数据类型,EAV设计模式,或者只是备用通用列),有时无架构数据库是一个不错的选择。
但是,在选择使用文档数据库之前,您需要确定自己的要求,因为您将失去使用关系模型的大量功能
...例如
如果您在RDBMS数据库中有多个表,则需要研究MongoDB为您提供的功能以满足这些需求。
如果您需要以特定方式查询数据,则需要再次研究MongoDB为您提供的内容。
我不认为NoSQL是RDBMS的替代品,而是一种稍微不同的工具,它带来了自己的优点和缺点,使其更适合某些项目而不是其他项目。
(两种数据库都可能在某些情况下使用。如果您决定沿着可能使用MongoDB的路线前进,一旦您研究了那些网站并有更多具体问题,您可以访问Freenode IRC #mongodb频道)
答案 1 :(得分:3)
我非常关注非关系系统与关系系统有很多其他条件。我更喜欢这个术语而不是sql / no-sql因为我个人认为它描述的差异更好,而且几个“no-sql”服务器都有sql附加组件,所以无论如何....什么样的并发模式或转换隔离在您的系统中是必需的。 rel和非rel dbs之间的所谓差异之一是“始终如一”,“始终如一”或“最终一致”。默认情况下,关系dbs通常属于“一致的主要”类别,并且有一些工作,并且大量的锁定和竞争条件,;)可以是“始终如一”,因此每个人总是在寻找最正确的表示形式。给出一些数据。我读过/听过的关于非rel dbs的大部分内容是它们主要是“最终的一致”。这意味着可能有许多我们的数据实例浮动,因此用户“A”可能会看到我们在库存中有92个小部件,而用户“B”可能看到79个,并且他们可能不会得到调和,直到有人真正去了从仓库里拿东西另一个问题是数据的可变性,需要多久更新一次?我所暴露的特定非rel数据库有更多的更新开销,其中一些必须重新生成整个数据集以包含任何更新。
现在介意,我认为非rel / nosql是非常好的工具,如果它们真的符合你的用例。我现在有几个我正在研究的项目。但是在做出决定时你必须考虑所有的权衡,否则它只会变成更多的简历驱动开发。
答案 2 :(得分:2)
我认为您不应该为其无架构设计选择NoSQL数据存储区。无模式设计始终存在于RDBMS中,并且一些数据库具有良好的XML支持。处理数据库要比NoSQL数据存储容易得多。可扩展性和大数据应该是选择NoSQL数据存储的主要驱动因素,否则ACID和SQL的权衡要转换为NoSQL。
答案 3 :(得分:1)
是什么引发了这个问题,如果您有一个大型服务器场并且需要管理数据分布和负载平衡,使用RDBMS实现起来更加困难和困难,并且需要高IT技能来设计,规划和部署解决方案(而且性能仍然较低)。 但如果你只有3或4个服务器项目很小。我认为你没有问题。 NoSQL数据库通常被认为是在大型服务器场中而不是少量服务器
答案 4 :(得分:1)
应该注意最重要的事情,以区分No-SQL和SQL 这是: 当数据库像社交网络一样以巨大的方式扩展时,NO-SQL很有用 例如 : Stack Overflow:每个问题都有多个答案而不是虚构的答案,所以No-SQL将确保每个问题都包含它的答案 因此,当需要获得问题的答案时,我们可以在不加入的情况下提供所有答案。因为连接是相关数据库中最昂贵的查询 非常感谢
答案 5 :(得分:0)
MongoDB 是用C ++编写的开源,跨平台,NoSQL文档数据库,可提供高性能,高可用性和高可伸缩性。
SQL Server 是用于电子商务和数据仓库解决方案的Microsoft关系数据库管理系统和分析系统。
让我们找出 SQL 和 MongoDB 之间的一些关键区别,但是您需要确定主要用于存储数据的数据库类型。
可扩展性
SQL和MongoDB数据库的扩展方式不同,这取决于将来数据集的增长方式。
SQL 数据库是垂直扩展的,这意味着您需要增加单个服务器的容量(增加CPU,RAM或SSD)来扩展数据库。 SQL数据库设计为在单个服务器上运行以维护数据的完整性,因此扩展起来并不容易。
MongoDB 数据库是水平扩展的,这意味着您可以添加更多服务器来为不断增长的数据库提供支持。这是MongoDB与SQL相比具有的巨大优势。
查询数据的能力
由于数据的结构和组织性很好,因此使用 SQL 数据库查询数据非常有效。它有效地执行查询,并快速检索和编辑数据。它非常轻巧且具有声明性,因此易于学习。因此,查询可以由较少的技术人员(例如业务分析师和营销人员)进行。
MongoDB 数据库为您可以存储的数据类型提供了很大的灵活性,但是由于数据结构可能存在巨大差异,因此查询的效率不如SQL数据库。构建MongoDB数据库技术时,开发人员专注于可伸缩性和灵活性,而不是查询效率。
加入
SQL和MongoDB数据库之间最大的区别之一是JOIN
。在关系数据库中, SQL JOIN子句允许您使用两个或多个表之间的公共字段来合并它们之间的行。
MongoDB 用于存储非规范化数据。理想情况下,集合之间应该没有关系。如果两个或更多个文档中需要相同的数据,则必须重复该数据。
幸运的是,MongoDB 3.2引入了一个新的$lookup
运算符,该运算符可以对两个或多个集合执行类似LEFT-OUTER-JOIN的操作。
关注的财产
SQL 数据库遵循ACID属性(原子性,一致性,隔离性和持久性),而 MongoDB 数据库遵循Brewers CAP定理(一致性,可用性和分区容限)。 / p>
MongoDB 4.0 增加了对多文档事务的支持,使其成为唯一将传统关系数据库的ACID保证,文档模型的速度,灵活性和功能与智能功能结合在一起的数据库。分布式系统设计用于横向扩展并将数据放置在您需要的地方。通过快照隔离,事务可以提供一致的数据视图,并强制执行全部或全部执行以维护数据完整性。
有关更多信息和更多智慧,
SQL vs NoSQL Database Differences Explained with few Example DB