MongoDB与RDBMS之优势对比

21CTO导读:让我们来看MongoDB为什么比数据库系统(如RDBMS)更具备优势。

在本文中,我将向各位介绍MongoDB与其它RDBMS进行的比较,并强调它优于后者。MongoDB是一个NoSQL数据库,是用C++编写的开源、跨平台的文档型数据库。

MongoDB是由一个名为10gen的公司的产品,他们将MongoDB定义是这样的:“MongoDB是一个可扩展、开源、高性能,面向文档的数据库。”

为什么选择MongoDB?

在本节中,我们将讨论MongoDB的优点:

让我们详细讨论其中的每一个。

富对象模型:MongoDB支持丰富且极有表现力的对象模型。对象可以具有属性,并且对象可以彼此嵌套(对于多个级别)。此模型非常“面向对象”,可以轻松表示域中的任何对象结构。您还可以索引在层次结构的任何级别、任何对象的属性 - 这非常强大!

辅助索引:索引会显著加快查询速度,但它们也会降低写入速度。辅助索引是MongoDB中的第一类构造,这使得即使嵌套对象也很容易索引存储在MongoDB中的对象的任何属性,使得基于这些二级索引从数据库的查询变得非常容易。

复制和高可用性:MongoDB支持“单主”模型。这意味着我们有一个主节点和许多从节点。如果主节点发生故障,其中一个从节点将被选为主节点。这个过程自动发生,但需要一些时间,在3.2版本发布之前,需要10-40秒。在MongoDB3.2及更高版本之后,检测故障的时间更快,并且新的主节点会在2-10秒内选出。多主机的权衡是读取速度较慢且扩展效率较低,客户端必须从多个节点读取以确保一致性。在新的主节点被选举期间,副本集会被关闭,无法进行写入。

本地聚合:MongoDB有一个内置的聚合框架,用于运行ETL(提取,转换和加载)管道以转换存储在数据库中的数据。这对于中小型作业非常有用,但随着数据处理需求变得更加复杂,聚合框架变得难以调试。

无架构模型:MongoDB,允许您不对文档强制执行任何架构。虽然这是以前版本的默认版本,但在较新版本中,您可以选择为文档强制执行架构。 MongoDB中的每个文档都可以有不同的结构,由应用程序来解释数据。虽然这与大多数应用程序无关,但在某些情况下,额外的灵活性非常重要,无模式模型意味着同一集合中的文档不需要具有相同的字段或结构集,并且集合文档中的公共字段可以包含不同类型的数据。

让我们看一个示例,以便在您希望MongoDB优先于RDBMS时更清晰:

在关系型数据库系统RDBMS中,在插入任何记录之前定义模式是必需的,并且要插入的记录结构应该与模式严格匹配。

RDBMS:定义学生表的模式。

CREATE TABLE student(

id bigint PRIMARY KEY NOT NULL,

name TEXT)

现在,让我们尝试插入一条记录

Insert into student values (1,"jason");

现在,假设我想在学生表中再添加一个字段。 为此,我们需要改变学生表的模式来做到这一点。

让我们试试而不改变数据库结构:

ERROR 1136 (21S01): Column count doesn't match value count at row 1

这样就会导致刚才已经讨论过的错误。

让我们用MongoDB尝试相同的事情。

在这里,我们不需要创建任何数据库结构,没有表的概念。在MongoDB中,可以直接在集合中插入记录,不需要为任何操作和定义任何模式结构。

让我们尝试插入操作,我们插入信息到学生信息表中:

现在,让我们尝试使用不同的模式在学生集合中插入记录:

接下来,我们尝试获取所有记录:

以上,便是MongoDB的工作原理。

下面,我们总结一下MongoDB优于关系型数据库的优点:

MongoDB是一个无架构的文档数据库,一个集合包含不同的文档。在关系数据库中,我们需要首先设计表,数据结构,外键关系,然后才能开始编码。

文档的字段数量,内容和大小从一个复制到另一个可能存在差异,在关系数据库中,每条记录都必须遵循特定的预定义模式。

而MongoDB是可水平扩展的,我们可以添加更多服务器(分片),但RDBMS只能垂直扩展,即增加内存。

MongoDB强调CAP定理(一致性,可用性和分区容差),但数据库系统强调ACID属性(原子性,一致性,隔离性与持久性)。

MongoDB最适合分层数据存储,但数据库系统却不适合。

MongoDB支持JSON和SQL两种查询方式,RDBMS仅支持SQL查询方式。

与RDBMS相比,MongoDB易于设置、配置和运行,比如它的Java客户端也很容易使用。

MongoDB在速度上比传统数据库系统快100倍,与NoSQL数据库相比速度较慢。

MongoDB中不支持复杂连接,但RDBMS支持复杂连接,这有时会难以理解,并且需要花费太多时间来执行。

MongoDB使用内部存储器来存储工作集,从而缩短访问时间。

MongoDB支持深度查询功能,即我们可以使用基本上与SQL一样强大的基于文档的查询语言对文档执行动态查询。

在MongoDB中,不需要将应用程序对象转换/映射到数据库对象。

希望本文能帮助大家了解MongoDB的用例,及其优于传统RDBMS的优势,祝大家编码愉快。

作者:高乐荣

文献:https://scalegrid.io/blog/cassandra-vs-mongodb/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180727G1ZH2K00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券