前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是MongoDB?简介、架构、功能和示例

什么是MongoDB?简介、架构、功能和示例

作者头像
MongoDB中文社区
发布2019-06-21 23:02:58
3.8K0
发布2019-06-21 23:02:58
举报
文章被收录于专栏:MongoDB中文社区

1

什么是MongoDB?

什么是MongoDB?MongoDB是一个面向文档的NoSQL数据库,用于大容量数据存储。MongoDB是2000年代中期出现的一个数据库,属于NoSQL数据库。

在这个教学大纲里,你会学习

• 什么是MongoDB? • MongoDB功能 • MongoDB 例子 • MongoDB架构的关键组件 • 为什么使用MongoDB • MongoDB中的数据建模 • MongoDB和RDBMS之间的差异

2

MongoDB功能

  1. 每个数据库都包含集合,而集合又包含文档。每个文档可以有不同的字段数。每个文档的大小和内容可以彼此不同。
  2. 文档结构更符合开发人员如何用各自的编程语言构造类和对象。开发人员通常会说,他们的类不是行和列,而是有一个带有键值对的清晰结构。
  3. 正如NoSQL数据库简介中所看到的,行(或MongoDB中调用的文档)不需要预先定义模式。相反,可以动态创建字段。
  4. MongoDB中可用的数据模型允许您更容易地表示层次关系、存储数组和其他更复杂的结构。
  5. 可扩展性—MongoDB环境非常容易扩展。世界各地的公司都定义了集群,其中一些公司运行100多个节点,数据库中有大约数百万个文档。

3

MongoDB 例子

下面的示例显示如何在MongoDB中建模文档。

  1. MongoDB添加了_id字段以唯一标识集合中的文档。
  2. 您可以注意到,RDBMS中的订单数据(OrderID、Product和Quantity )通常存储在单独的表中,而在MongoDB中,它实际上存储在集合本身的一个嵌入文档中。这是MongoDB中数据建模方式的主要区别之一。

4

MongoDB架构的关键组件

以下是MongoDB中使用的一些常用术语

1. _ id – 这是每个MongoDB文档中都需要的字段。_id字段表示MongoDB文档中的唯一值。“ID”字段类似于文档的主键。如果创建一个没有id字段的新文档,MongoDB将自动创建该字段。例如,如果我们看到上面的customer表的示例,MongoDB 将向集合中的每个文档添加一个24位的唯一标识符。

代码语言:javascript
复制
_Id CustomerID CustomerName OrderID563479cc8a8a4246bd27d784 11 Guru99 111563479cc7a8a4246bd47d784 22 Trevor Smith 222563479cc9a8a4246bd57d784 33 Nicole 333
  1. 集合 – 这是一组MongoDB文档。集合相当于在任何其他RDM(如Oracle或MS SQL)中创建的表。单个数据库中存在集合。从介绍集合中可以看出,不强制任何类型的结构。
  2. 游标 – 这是指向查询结果集的指针。客户机可以遍历光标以检索结果。
  3. 数据库 – 这是一个用于集合的容器,就像在RDMS中一样,其中它是一个用于表的容器。每个数据库在文件系统上都有自己的文件集。MongoDB服务器可以存储多个数据库。
  4. 文件 – MongoDB集合中的记录基本上称为文档。文档将依次由字段名和值组成。
  5. 字段 – 文档中的名称-值对。文档有零个或多个字段。字段类似于关系数据库中的列。

下图显示了具有键值对的字段示例。因此在下面的示例中,CustomerID和11是文档中定义的键值对之一。

6.JSON – 这被称为javascript对象表示法。这是一种人类可读的纯文本格式,用于表示结构化数据。目前许多编程语言都支持JSON。

只需简单说明ID字段和普通集合字段之间的关键区别。标识字段用于唯一标识集合中的文档,并在创建集合时由MongoDB自动添加。

5

为什么使用MongoDB?

下面是为什么应该开始使用MongoDB的几个原因

  1. 面向文档 – 由于MongoDB是一个NoSQL类型的数据库,因此它不使用关系类型格式的数据,而是将数据存储在文档中。这使得MongoDB非常灵活,能够适应实际的业务环境和需求。
  2. 即席查询 – MongoDB支持按字段、范围查询和正则表达式搜索。可以进行查询以返回文档中的特定字段。
  3. 索引-可以创建索引以提高MongoDB中搜索的性能。MongoDB文档中的任何字段都可以被索引。
  4. 复制-MongoDB可以为副本集提供高可用性。副本集由两个或多个Mongo DB实例组成。每个副本集成员可以随时扮演主副本或辅助副本的角色。主副本是与客户机交互并执行所有读/写操作的主服务器。辅助副本使用内置复制来维护主副本的数据。当主副本失败时,副本集会自动切换到辅助副本,然后成为主服务器。
  5. 负载均衡 – MongoDB使用sharding的概念,通过跨多个MongoDB实例拆分数据来横向扩展。MongoDB可以在多个服务器上运行,平衡负载和/或复制数据,以在硬件故障时保持系统的正常运行。

MongoDB中的数据建模

正如我们在介绍部分看到的,MongoDB中的数据有一个灵活的模式。与SQL数据库不同,在插入数据之前必须声明表的模式,MongoDB的集合不强制使用文档结构。这种灵活性正是MongoDB如此强大的原因。

在Mongo中建模数据时,请记住以下几点

  1. 应用程序的需求是什么?查看应用程序的业务需求,并查看应用程序所需的数据和数据类型。在此基础上,确保相应地确定文件的结构。
  2. 什么是数据检索模式?如果您预见到大量的查询使用,那么考虑在数据模型中使用索引来提高查询的效率。
  3. 数据库中是否经常发生插入、更新和删除操作?如果数据建模设计中需要,请重新考虑索引的使用或合并碎片,以提高整个MongoDB环境的效率。

MongoDB和RDBMS之间的差异

以下是MongoDB和RDBMS之间的一些关键术语差异

RDBMS MongoDB 不同点

Table Collection 在RDBMS中,该表包含用于存储数据的列和行,而在MongoDB中,该结构称为集合。集合包含的文档依次包含字段,而字段又是键值对。

Row Document 在RDBMS中,该行表示表中的单个隐式结构化数据项。在MongoDB中,数据存储在文档中. Column Field 在RDBMS中,该列表示一组数据值。在MongoDB中,这些被称为字段。

Joins Embedded documents 在RDBMS中,数据有时分布在不同的表中,为了显示所有数据的完整视图,有时会在表中形成一个连接来获取数据。在MongoDB中,数据通常存储在单个集合中,但使用嵌入式文档进行分隔。所以MongoDB中没有连接的概念。

除术语差异外,其他一些差异如下所示

  1. 关系数据库以增强数据完整性而闻名。这在MongoDB中不是一个明确的要求。
  2. RDBMS要求首先对数据进行规范化,这样可以防止孤立记录和重复的规范化数据,然后需要更多的表,这将导致更多的表联接,从而需要更多的键和索引。

随着数据库的增长,性能可能开始成为一个问题。这在MongoDB中不是一个明确的要求。MongoDB是灵活的,不需要首先对数据进行规范化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mongoing中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是MongoDB?
  • MongoDB功能
  • MongoDB 例子
  • MongoDB架构的关键组件
  • 为什么使用MongoDB?
  • MongoDB中的数据建模
  • MongoDB和RDBMS之间的差异
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档