文章目录
- 一、MongoDB简介
- 二、MongoDB历史
- MongoDB支持语言
- MongoDB与关系型数据库术语对比
- 数据类型
- 三、部署MongoDB
- 下载二进制包
- 安装步骤
- 启动MongoDB
- 客户端配置
- 关闭MongoDB
- 前台启动
- 后台启动
- kill 命令关闭
- MongoDB函数关闭
一、MongoDB简介
Mongo并非芒果(Mango)的意思,而是源于Humongous(巨大的、庞大的)一词
MongoDB是一个基于分布式文件存储的NoSQL数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
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发布,包含了新的Wired Tiger存储引擎、可插拔存储引擎API、增加了50个副本集限制和安全改进。同年晚些时候又发布了3.2版本,支持文档验证、部分索引和一些主要的聚合增强。
- 2016年MongoDB 推出了Atlas服务。。。
MongoDB支持语言
MongoDB与关系型数据库术语对比
数据类型
数据类型 | 描述 | 举例 |
---|---|---|
字符串 | utf8字符串都可以表示为字符串类型的数据 | {”x“:“foobar”} |
对象id | 对象id是文档的12字节的唯一ID | {”x“:Objectid()} |
布尔值 | 真或者假:true或者false | {”x“:true} |
数组 | 值的集合或者列表都可以表示成数组 | {”x“:[‘a’,‘b’,‘c’]} |
整数 | (Int32 int64) | {”x“:18} |
null | 表示空值或者未定义的对象 | {”x“:null} |
undefined | 文档中也可以使用未定义类型 | {”x“:undifined} |
三、部署MongoDB
下载二进制包
- 下载地址:https://www.mongodb.com/try/download/community
安装步骤
- 下载安装包并且解压
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.6.tgz
tar xzvf mongodb-linux-x86_64-rhel70-4.4.6.tgz -C /usr/local # 指定解压到哪个目录
cd /usr/local
ln -s /usr/local/mongodb-linux-x86_64-rhel70-4.4.6 /usr/local/mongodb
- 创建用于存放数据和日志的文件夹,并修改其权限增加读写权限
# 创建存放数据的目录
mkdir -p /usr/local/mongodb/data/db
# 创建存放日志的目录
mkdir -p /usr/local/mongodb/logs
# 创建日志记录文件
touch -p /usr/local/mongodb/logs/mongodb.log
启动MongoDB
- MongoDB的默认启动方式为前台启动。所谓的前台启动就是MongoDB启动进程后会占用当前的终端窗口
cd /usr/local/mongodb
bin/mongod \
--dbpath /usr/local/mongodb/data/db \
--logpath /usr/local/mongodb/logs/mongodb.log \
--logappend \
--port 27017 \
--bind_ip 0.0.0.0
--dbpath:指定数据文件存放目录
--logpath:指定日志文件,注意是指定文件不是目录
--logappend:使用追加的方式记录日志
--port:指定端口,默认为27017
--bind_ip:绑定服务IP,若绑定127.0.0.1,则只能本机访问,默认为本机地址
- 所谓的后台启动就是以守护进程的方式启动MongoDB。命令中添加–fork即可
# 后台启动
cd /usr/local/mongodb
bin/mongod \
--dbpath /usr/local/mongodb/data/db \
--logpath /usr/local/mongodb/logs/mongodb.log \
--logappend \
--port 27017 \
--bind_ip 0.0.0.0
--forkbin/mongod -f /usr/local/mongodb/bin/mongodb.conf
通过命令启动的方式并不适合管理,毕竟每次输入命令都需要考虑各参数的配置。我们可以通过配置文件来配置启动参数,然后通过指定配置文件的方式启动服务,这样在管理MongoDB上就毕竟方便了。
- 在bin目录下增加一个mongodb.conf配置文件
vim /usr/local/mongodb/bin/mongodb.conf
# 数据文件存放目录
dbpath = /usr/local/mongodb/data/db
# 日志文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log
# 以追加的方式记录日志
logappend = true
# 端口默认为27017
port = 27017
# 对访问IP地址不做限制,默认为本机地址
bind_ip = 0.0.0.0
# 以守护进程的方式启用,即在后台运行
fork = true
- 配置systemd服务
vim /usr/lib/systemd/system/mongodb.service[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/bin/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.targetchmod 754 /usr/lib/systemd/system/mongodb.service
- 启动
systemctl restart mongodb
客户端配置
- 添加环境变量
vim /etc/profile
export PATH=/usr/local/mongodb/bin/:$PATHsource /etc/profile
mongo #客户端工具
- 客户端常用命令
# 查看帮助
> help# 查看版本信息
> db.version()#查看数据库
> show dbs;
> show databases;
关闭MongoDB
前台启动
Ctrl+c
后台启动
- 使用–shutdown参数即可关闭
# 命令启动方式的关闭
bin/mongod \
--bpath /usr/local/mongodb/data/db \
--logpath /usr/local/mongodb/logs/mongodb.log \
--logappend \
--port 27017 \
--bind_ip 0.0.0.0
--fork
--shutdown# 配置文件启动方式的关闭
bin/mongod -f /usr/local/mongodb/bin/mongodb.conf --shutdown
kill 命令关闭
- 通过kill -9的方式强制关闭进程,一般这种方式都不怎么推荐
# 查看mongodb运行的进程信息
ps -ef | grep mongodb
kill -9 pid
MongoDB函数关闭
- 连接到MongoDB 服务后,切换到admin数据库,使用相关函数关闭服务
# 连接mongodb
bin/mongo
# 切换 admin 数据库
use admin
# 执行以下函数即可关闭服务2选1
db.shutdownServer()
db.runCommand("shutdown")