分布式文件存储数据库 MongoDB
MongoDB 简介
Mongo 并非芒果(Mango)的意思,而是源于 Humongous(巨大的;庞大的)一词。
MongoDB 是一个基于分布式文件存储的 NoSQL 数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。关于什么是 NoSQL 可阅读《学了那么多 NoSQL 数据库 NoSQL 究竟是啥》
MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。
MongoDB 使用 BSON(Binary JSON)对象来存储,与 JSON 格式的键值对(key/value)类似,字段值可以包含其他文档,数组及文档数组。支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB 历史
2007 年,Dwight Merriman,Eliot Horowitz 和 Kevin Ryan 成立 10gen 软件公司,在成立之初,这家的公司目标是进军云计算行业,为企业提供云计算服务。在开发云计算产品时,他们准备开发一个类似于数据库的组件,为云计算产品提供存储服务。当时是关系型数据库一统天下的时间,他们觉得传统的关系型数据库无法满足他们的要求,他们想要一款程序员不懂SQL语言也可以使用的数据存储产品。
在网络上找了一圈,不管是开源的还是闭源的产品,都没找到让他们满意的东西,既然找不到,那就自己开发吧,反正他们也有那个技术实力,10gen 的创始人都来自谷歌,他们创建的网络广告公司 DoubleClick 被谷歌收购了,这是他们的第二次创业。
10gen 公司不使用关系型数据库是有一定原因的,当时他们还在 DoubleClick 公司的时候,就吃过关系型数据库的苦头。DoubleClick 是一家网络广告公司,服务美国众多的知名公司,该公司每秒提供 40 万个广告,但在可伸缩性和敏捷性方面经常遇到困难,因此他们不得不经常自己开发和使用许多自定义数据存储来解决现有关系型数据库的不足,这让他们很是苦恼。
因此他们决定开发一款数据库产品解决他们在 DoubleClick 时遇到的问题,并为自己的云计算产品提供存储服务。
MongoDB 最初于 2007 年开发,由位于纽约的一个名为
10gen
的组织开发,现在被称为MongoDB Inc.
2009 年,经过将近 2 年的开发,10gen 开发出了 MongoDB 的雏形并将它开源以及正式命名为 MongoDB,同时成立开源社区,通过社区运营 MongoDB。
2009 年 02 月 MongoDB 1.0 发布,提供了大部分基本的查询功能。
2009 年 12 月 MongoDB 1.2 发布,引入了 map-reduce,支持大规模数据处理。
MongoDB 的第一个真正产品是从 2010 年 03 月发布的 MongoDB 1.4 版本开始的。
2010 年 8 月 MongoDB 1.6 发布,引入了一些主要特性,比如用于水平伸缩的分片、具备自动故障转移能力的副本集以及对 IPv6 的支持。
2012 年 05 月 23 日,MongoDB 2.1 发布。该版本采用全新架构,包含诸多增强。
2012 年 06 月 06 日,MongoDB 2.0.6 发布,分布式文档数据库。
2012 年 8 月 MongoDB 2.2 发布,引入了聚合管道,可以将多个数据处理步骤组合成一个操作链。
2013 年 MongoDB 推出第一款商业版本 MongoDB Enterprise Advanced。
2013 年 04 月 23 日,MongoDB 2.4.3 发布,此版本包括了一些性能优化,功能增强以及 bug 修复。
2013 年 08 月 20 日,MongoDB 2.4.6 发布,仍然是以性能优化,功能增强和 bug 修复为主。
2015 年 03 月 MongoDB 3.0 发布,包含了新的 WiredTiger 存储引擎、可插拔存储引擎 API、增加了 50 个副本集限制和安全改进。同年晚些时候又发布了 3.2 版本,支持文档验证、部分索引和一些主要的聚合增强。
2016 年 MongoDB 推出了 Atlas 服务,MongoDB Atlas,与公有云服务厂商(谷歌、微软Azure)合作。这一年,MongoDB 爆出了非常严重的安全门事件,黑客通过 MongoDB 的默认监听地址 0.0.0.0 删除数据,并且通过此漏洞进行勒索,支付 0.2 到 0.5 的比特币就可以恢复数据。
2017 年 10 月 MongoDB 公司成立 10 周年之际,顺利通过 IPO 在纽交所上市。开盘 24 美元,公司估值达到 16 亿美元,并获得 1.92 美元的筹资。
2017 年 11 月 MongoDB 3.6 发布,为多集合连接查询、变更流和使用 JSON 模式进行文档验证提供了更好的支持。
2018 年 06 月 MongoDB 4.0 发布,这一版本的发布获得了广泛的关注,提供了跨文档事务处理能力。这是一个重要的里程碑,MongoDB 已经为高数据完整性需求做好了准备。
2019 年 03 月 18 日,Forrester 授予 MongoDB NoSQL 领导者称号。
2019 年 10 月 MongoDB 4.2 发布,开始支持分布式事务。
截至 2020 年 10 月,MongoDB 的社区版版本是 4.4.1,扩展性和性能增强,降低复制延迟,可用性和容错性增强,查询能力和易用性增强,MongoDB 云平台的功能更新。MongoDB 逐渐的从一个专注于数据库服务的厂商,转变为提供数据平台服务的厂商。
截至 2020 年,MongoDB 的全球下载量达到了 1.1 亿次。MongoDB 公司目前有 2000 多名员工,有超过 18000 名付费客户,其中有很多客户同时使用 MongoDB Atlas 和 MongoDB 企业版。大多数大公司在内部的一些场景中仍然使用的是社区版。MongoDB 社区版仍然是开源的,除了一些关键特性外,它与 MongoDB 企业版差不多。
MongoDB 支持语言
MongoDB 与关系型数据库术语对比
MongoDB 数据类型
MongoDB 下载与安装
下载
下载地址:https://www.mongodb.com/try/download/community
在页面中选择 MongoDB Community Server
社区版,根据自己的系统选择对应的版本,我自己使用的是 CentOS
版本。而 MongoDB 只有 RedHat
版本,下载使用即可。
CentOS 是 Community ENTerprise Operating System 的简称,也可以叫它社区企业操作系统,是 Linux 操作系统中的一个发行版本。
>
CentOS 并不是全新的 Linux 发行版,它是 Red Hat 家族发行的企业版的产品 Red Hat Enterprise Linux(以下称之为 RHEL)的克隆版本。RHEL 是很多企业采用的 Linux 发行版本,需要向 Red Hat 付费才可以使用,并能得到付费对应的服务,技术支持和版本升级。CentOS 可以像 RHEL 一样的构筑 Linux 系统环境,但不需要向 Red Hat 支付任何的产品和服务费用,同时也得不到任何有偿技术支持和升级服务。
还可以通过:https://docs.mongodb.com/manual/installation/ 确认该版本软件是否支持你的操作系统。
安装
将资源上传至服务器 /usr/local/src
,解压至 /usr/local
并重命名为 mongodb
。
创建数据/日志目录
创建用于存放数据和日志的文件夹,并修改其权限增加读写权限。
启动 MongoDB
前台启动
MongoDB 的默认启动方式为前台启动。所谓的前台启动就是 MongoDB 启动进程后会占用当前的终端窗口。
--dbpath
:指定数据文件存放目录--logpath
:指定日志文件,注意是指定文件不是目录--logappend
:使用追加的方式记录日志--port
:指定端口,默认为 27017--bind_ip
:绑定服务 IP,若绑定 127.0.0.1,则只能本机访问,默认为本机地址
后台启动
所谓的后台启动就是以守护进程的方式启动 MongoDB。命令中添加 --fork
即可。
通过命令启动的方式并不适合管理,毕竟每次输入命令都需要考虑各参数的配置。我们可以通过配置文件来配置启动参数,然后通过指定配置文件的方式启动服务,这样在管理 MongoDB 上就比较方便了。
配置文件
在 bin
目录下增加一个 mongodb.conf
配置文件。
启动
客户端访问
可以通过 bin
目录中的 mongo
来访问 MongoDB
服务器。
命令为:bin/mongo --host 连接的主机地址(默认127.0.0.1) --port 端口(默认27017)
help
帮助命令。
db.version()
查看版本信息。
show dbs
查看所有数据库。
这里先简单通过客户端进行访问测试,后面会详细罗列客户端操作 MongoDB 数据库、集合、文档、索引、内置函数等相关的操作。
关闭 MongoDB
前台启动关闭
使用 Ctrl + c
即可关闭。
后台启动关闭
使用 --shutdown
参数即可关闭。
kill 命令关闭
通过 kill -9
的方式强制关闭进程,一般这种方式都不怎么推荐使用。
MongoDB 函数关闭
连接到 MongoDB 服务后,切换到 admin 数据库,并使用相关函数关闭服务。
环境变量
每次操作 MongoDB 都需要进入具体的目录才行,比如启动服务,客户端进行连接等,可不可以在任意目录都能进行操作。答案当然是可以的,只需要将 MongoDB 相关目录添加至系统环境变量即可。
先通过 vim /etc/profile
编辑系统环境变量文件,添加以下内容。
然后通过 source /etc/profile
重新加载系统环境变量。这样在系统任意目录下都可以直接操作 MongoDB 了。
本文讲解了 MongoDB 的一些入门级内容,教会了大家如何基于 Linux 环境下载与安装 MongoDB。下文我们先从安全问题入手,看看 MongoDB 未加密导致的惨痛经历与教训,顺便再教大家一波实用的解决方案。
本文采用 知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议。
🤗 您的点赞
和转发
是对我最大的支持。
📢 扫码关注 哈喽沃德先生
「文档 + 视频」每篇文章都配有专门视频讲解,学习更轻松噢 ~
版权声明: 本文为 InfoQ 作者【哈喽沃德先生】的原创文章。
原文链接:【http://xie.infoq.cn/article/ae94f8b27f5060277f1a5b1f0】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论