Mongo并非芒果(Mango)的意思,而是源于Humongous(巨大的、庞大的)一词
MongoDB是一个基于分布式文件存储的NoSQL数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。
MongoDB使用了BSON(Binary JSON)对象来存储,与JSON格式的键值对(key/value)类似,字段值可以包含其他文档,数组及文档数组。支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还指出对数据建立索引。
2007年,Dwight Merriman,Eliot Horowitz和Kevin Ryan成立10gen软件公司,在成立之初,这家的公司目标是进军云计算行业,为企业提供云计算服务。在开发云计算产品时,他们准备开发一个类似于数据库的组件,为云计算产品提供存储服务。当时是关系型数据库一统天下的时间,他们觉得传统的关系型数据库无法满足他们的要求,他们想要一款程序员不懂SQL语言也可以使用的数据库产品。
在网络上找了一圈,不管是开源的还是闭源的产品,都没找到让他们满意的东西,那既然找不到,就自己开发吧,反正他们也有那个技术实力,10gen的创始人都来自谷歌,他们创建的网络广告公司DoubleClick被谷歌收购了,这是他们的第二次创业。
10gen公司不适用关系型数据库是有一定原因的,当时他们还在DoubleClick公司的时候,就吃过关系型数据库的苦头。DoubleClick是一家网络广告公司,服务美国众多的知名公司,该公司每秒提供40万个广告,但在可伸缩性和敏捷性方面经常遇到困难,因此他们不得不经常自己开发使用许多自定义数据存储来解决现有关系型数据库的不足,这让他们很是苦恼。
因此他们决定开发一款数据库产品解决他们在DoubleClick时遇到的问题,并为自己的云计算产品提供存储服务。
数据类型 | 描述 | 举例 |
---|---|---|
字符串 | 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} |
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
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,则只能本机访问,默认为本机地址
# 后台启动
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
--fork
bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
通过命令启动的方式并不适合管理,毕竟每次输入命令都需要考虑各参数的配置。我们可以通过配置文件来配置启动参数,然后通过指定配置文件的方式启动服务,这样在管理MongoDB上就毕竟方便了。
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
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.target
chmod 754 /usr/lib/systemd/system/mongodb.service
systemctl restart mongodb
vim /etc/profile
export PATH=/usr/local/mongodb/bin/:$PATH
source /etc/profile
mongo #客户端工具
# 查看帮助
> help
# 查看版本信息
> db.version()
#查看数据库
> show dbs;
> show databases;
Ctrl+c
# 命令启动方式的关闭
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
# 查看mongodb运行的进程信息
ps -ef | grep mongodb
kill -9 pid
# 连接mongodb
bin/mongo
# 切换 admin 数据库
use admin
# 执行以下函数即可关闭服务2选1
db.shutdownServer()
db.runCommand("shutdown")