前言

本文从MongoDB 的简介、特点、优点、趋势、等几个方面来介绍了MongoDB。

MongoDB - 简介

MongoDB(来自于英文单词“Humongous”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有很高可靠性和操作灵活性。

MongoDB - 概念

在mongodb中基本的概念是文档、集合、数据库。

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

MongoDB - 特点

临时(Ad hoc)查询:

MongoDB支持字段,范围查询,正则表达式搜索。查询可以返回特定的文档字段,并且还包括用户定义的JavaScript函数。查询也可以配置为返回给定大小的结果的随机抽样。

索引:

MongoDB文档中的字段可以使用主索引和辅助索引进行索引。

复制:

MongoDB提供高可用性与副本集。副本集由两个或多个数据副本组成。每个副本集成员可以在任何时候以主副本的角色起作用。默认情况下,所有写入和读取都在主副本上完成。辅助副本使用内置复制维护主数据的副本。当主副本失败时,副本集会自动进行选举过程,以确定哪个辅助应该成为主要副本。辅助功能可以选择性地提供读取操作,但是数据默认情况下才最终保持一致。

负载均衡:

MongoDB使用分片水平缩放。用户选择一个分片键,它确定集合中的数据将如何分发。数据被分割为范围(基于分片键)并分布在多个分片上。(碎片是一个或多个奴隶的主人)。或者,碎片密钥可以被散列以映射到分片 - 实现均匀的数据分发。

MongoDB可以在多台服务器上运行,平衡负载或复制数据,以防止硬件故障时系统启动并运行。

文件存储:

MongoDB可以用作具有负载平衡和数据复制功能的文件系统,通过多台机器存储文件。

此功能被称为网格文件系统,包含在MongoDB的驱动程序。MongoDB向开发人员公开了文件操作和内容的功能。GridFS用于Nginx 和lighttpd的插件。GridFS将文件划分为部分或块,并将这些块中的每一个作为单独的文档存储。

聚合:

MapReduce可用于批量处理数据和聚合操作。

聚合框架使用户能够获得使用SQL。聚合框架包括可以从多个文档加入文档的$ lookup运算符,以及诸如标准偏差的统计运算符。

服务器端JavaScript执行:

JavaScript可用于查询,聚合功能(如MapReduce),并直接发送到要执行的数据库。

覆盖的集合:

MongoDB支持固定大小的集合,称为封顶集合。这种类型的集合维护插入顺序,一旦达到指定的大小,就像一个循环队列。

MongoDB - 优点

MongoDB优于RDBMS:

  • 模式少 MongoDB是一个文档数据库,其中一个集合持有不同的文档。文档的数量,内容和大小可能因文档而异。
  • 单个对象的结构是清楚的。
  • 没有复杂的连接。
  • 深度查询能力。MongoDB支持使用几乎与SQL一样强大的基于文档的查询语言对文档进行动态查询。
  • MongoDB易于扩展。
  • 将应用程序对象转换/映射到不需要的数据库对象。
  • 使用内部存储器存储(加窗)工作集,实现数据更快的访问。

为什么要使用MongoDB?

  • 面向文档的存储 数据以JSON样式文档的形式存储。
  • 任何属性的索引
  • 复制和高可用性
  • 自动分片
  • 丰富的查询
  • 快速就地更新
  • MongoDB的专业支持

MongoDB的应用场景?

  • 大数据
  • 内容管理和交付
  • 移动和社会基础设施
  • 用户数据管理
  • 数据中心

MongoDB - 趋势

搜索指数:

百度指数:http://index.baidu.com/?tpl=trend&word=mongodb

谷歌趋势:https://trends.google.com/trends/explore?date=today%205-y&q=MongoDB

分别对比了五年内的搜索结果,整体呈上升趋势,近一年内趋于平缓。

流行程度:

数据来源于 DB-Engines,DB-Engines是一个收集和呈现数据库管理系统(DBMS)的网站。

DB-Engines目前市场上数据库的人气排名列表,列表每月更新一次。

MongoDB 综合排名第四位,文档类数据库排名第一位。

DB-Engines:https://db-engines.com/en/ranking

DB-Engines的排名主要根据5个因素来进行:Google以及Bing搜索引擎的关键字搜索数量、Google Trends的搜索数量、Indeed网站中的职位搜索量、LinkedIn中提到关键字的个人资料数以及Stackoverflow上相关的问题和关注者数量。

MongoDB - 安装

安装:

MongoDB 官网提分别供了基于 Linux、OS X、Windows 系统上的安装教程。

在 OS X系统中,官方建议使用 Homebrew 来安装,步骤如下:

  1. 更新 HomeBrew:
    brew update
  2. 安装 MongoDB:
    brew install mongodb
    其他安装操作:

安装具有TLS / SSL支持的MongoDB二进制文件:

brew install mongodb --with-openssl

安装用于测试和开发的最新版本:

brew install mongodb --devel

参考资料:http://www.mongoing.com/docs/installation.html

配置:

安装完成 MoongoDB 之后,需要在当前用户的根目录下为 MongoDB 数据库添加环境变量,由于采用了 HomeBrew来安装的 MongoDB,对 Homebrew 不熟悉的人可能不清楚安装在哪里了,这时可以使用 brew info 来查看。

示例代码: (省略部分内容)

# 查看 MongoDB 的安装信息
➜  ~ brew info mongodb
mongodb: stable 3.4.9 (bottled), devel 3.5.11
==> Dependencies  ……
==> Requirements  ……
==> Options  ……
--with-boost ……
--with-sasl  ……
--without-openssl  ……
--devel  ……
==> Caveats
To have launchd start mongodb now and restart at login:
  brew services start mongodb
Or, if you don't want/need a background service you can just run:
  mongod --config /usr/local/etc/mongod.conf
# 配置MongoDB环境变量
➜  ~ vim .bash_profile

export PATH=/usr/local/Cellar/mongodb/3.4.3/bin:${PATH}

➜  ~ source .bash_profile

MongoDB的默认数据目录为/data/db,如需要修改,可以在 MongoDB 的配置文件中修改dbPath选项。

路径如下:

➜  ~ cat /usr/local/etc/mongod.conf

MongoDB - 启动

安装配置完成之后,打开 terminal,输入mongod,直至出现I NETWORK [thread1] waiting for connections on port 27017字样则算启动成功,然后再打开另一终端窗口,输入 mongo,则可以直接进入 MongoShell 界面。

学习资料

参考资料

DB-Engines: https://db-engines.com

MongoDB Manual: https://docs.mongodb.com/manual/