概念
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
特点
面向集合存储,易于存储对象类型的数据
模式自由
支持动态查询
支持完全索引,包含内部对象
支持查询
支持复制和故障恢复
使用高效的二进制数据存储,包括大型对象(如视频等)
自动处理碎片,以支持云计算层次的扩展性
支持 Python, PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序,社区
中也提供了对 Erlang 及.NET 等平台的驱动程序
文件存储格式为 BSON(一种 JSON的扩展)
可通过网络访问
功能
1、面向集合的存储:适合存储对象及JSON形式的数据
2、动态查询: MongoDB 支持丰富的查询表达式。 查询指令使用 JSON形式的标记,可轻易查询文档中内嵌的对象及数组
3、完整的索引支持:包括文档内嵌对象及数组。 MongoDB 的查询优化器会分析查询表达式,并生成一个高效的查询计划
4、查询监视: MongoDB 包含一系列监视工具用于分析数据库操作的性能
5、复制及自动故障转移: MongoDB 数据库支持服务器之间的数据复制,支持主 -从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移
6、高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
7、自动分片以支持云级别的伸缩性: 自动分片功能支持水平的数据库集群, 可动态添加额外的机器
适用场合
1、网站数据: MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性
2、缓存:由于性能很高, MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载
3、大尺寸,低价值的数据: 使用传统的关系型数据库存储一些数据时可能会比较昂贵
4、高伸缩性的场景: MongoDB 非常适合由数十或数百台服务器组成的数据库。 MongoDB的路线图中已经包含对 MapReduce 引擎的内置支持
5、用于对象及 JSON数据的存储: MongoDB 的 BSON数据格式非常适合文档化格式的存储及查询
MongoDB局限与不足
1、32位系统上,不支持大于2.5G的数据。
2、单个文档大小限制为16M。
3、锁粒度太粗,MongoDB使用一把全局读写锁。
4、不支持join操作和事务机制 对内存要求比较大,至少要保证热数据(索引,数据及系统其他开销)都能装进内存
5、用户权限方面较弱
6、MapReduce在单个实例上无法运行,可用Auto-Sharding实现,是由JS引擎限制造成。
7、MapReduce的结果无法写入到一个被Sharding的collection中,待后续版本解决
8、对于数组型的数据操作不够丰富
MongoDB数据类型
null
布尔 ture|false
整数 123
浮点 12.3
字符串 “hello world”
对象ID 用 new ObjectId()来申明。
日期 用 new Date()来申明时间戳
数组 [“apple”,”blanan”,”pear”]
内嵌文档 {“username” : “jone”, “age”: 13, “contact” : {“home”:”123”,” moblie”:”456”}}
RegExp 正则表达式 /[a-z]/
MongoDB 安装
yum安装
参考官方文档:http://docs.mongoing.com/manual-zh/tutorial/install-mongodb- enterprise-on-red-hat.html
https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7-4.2/
1、配置MongoDB Enterprise的yum 源文件
[root@node1 ~]# vim /etc/yum.repos.d/mongodb.repo
[mongodb-enterprise]
name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/4.2/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
2、安装包
[root@node1 ~]# yum install mongodb-enterprise-4.2.8 -y
3、启动服务
[root@node1 ~]# systemctl start mongod.service
[root@node1 ~]# systemctl enable mongod 开机自启动
[root@node2 ~]# mongo
MongoDB Enterprise >
4、测试:
[root@node1 ~]# netstat -lnupt | grep 27017
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 11661/mongod
[root@node1 ~]# ps -ef | grep mongd
root 11686 11408 0 15:24 pts/0 00:00:00 grep --color=auto mongd
源码安装
[root@slave02 ~]# wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.8.tgz
[root@slave02 ~]# tar xf mongodb-linux-x86_64-rhel70-4.2.8.tgz -C /usr/local/
[root@slave02 ~]# cd /usr/local/
[root@slave02 local]# ln -sv mongodb-linux-x86_64-rhel70-4.2.8/ mongodb
"mongodb" -> "mongodb-linux-x86_64-rhel70-4.2.8/"
启动:
1、命令行启动
[root@node4 ~]# mongod --dbpath /var/lib/mongo/ &
[root@node4 ~]# mongo
>
2、配置文件启动
[root@node2 ~]# scp /etc/mongod.conf 192.168.16.140:/etc
[root@node2 ~]# scp /usr/lib/systemd/system/mongod.service 192.168.16.140:/usr/lib/systemd/system/
创建组和用户
[root@slave02 ~]# mkdir -p /var/log/mongodb/ /var/run/mongodb/
[root@slave02 ~]# groupadd -g 995 -r mongod
[root@slave02 ~]# useradd -r -u 995 -g 995 -d /var/lib/mongo -c 'mongod' -s /bin/false mongod
[root@slave02 ~]# chown -R mongod.mongod /usr/local/mongodb/*
[root@slave02 ~]# vim /etc/profile.d/mongo.sh
export PATH=/usr/local/mongodb/bin/:$PATH
[root@slave02 ~]# source /etc/profile.d/mongo.sh
[root@slave02 ~]# mkdir /var/lib/mongo
[root@slave02 ~]# chown -R mongod.mongod /var/lib/mongo
编辑配置文件
[root@node4 local]# vim /etc/mongod.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 127.0.0.1
编辑启动脚本
[root@slave02 mongodb]# vim /usr/lib/systemd/system/mongod.service
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /etc/mongod.conf
ExecStop=/usr/local/mongodb/bin/mongod --shutdown -f /etc/mongod.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动测试:
[root@node4 ~]# systemctl daemon-reload
[root@node4 ~]# systemctl start mongod.service
[root@node4 ~]# netstat -lnupt | grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 12076/mongod
[root@node4 ~]# mongo
>
关闭测试
[root@node4 ~]# systemctl stop mongod.service