一、简介
MongoDB是一种强大、灵活,且易于扩展的通用型数据库。他能扩展出非常多的功能。如二级索引(secondary index)、范围查询(range query)、排序、聚合(aggregation),以及地理空间索引(geospatial index)。
1、易于使用
MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。面向文档的数据库不在有“行(row)”的概念,取而代之的是更为灵活的“文档(document)”模型。通过在文档中嵌入文档和数组,面向文档的方法能够仅适用一条记录来表现复杂的层次关系。
不在有预定义模式(predefined schema),文档的键(key)和值(value)不在是固定的类型和大小。由于没有固定的模式,根据需要添加或删除字段变得更容易了。
2、易于扩展
MongoDB的设计采用横向扩展。面向文档的数据模型使它很容易地在多台服务器之间进行数据切割。MongoDB能自动处理跨集群的数据和负载,自动重新分配文档,以及将用户的路由到正确机器上。
3、丰富的功能
MongoDB作为一款通用型数据库,除了能够创建、读取、更新和删除数据之外,还提供一系列不断扩展的独特功能。
索引(indexing):
MongoDB支持通用二级索引,允许多种快速查找,且提供唯一索引、符合索引、地理空间索引,以及全文索引。
聚合(aggregation):
MongoDB支持“聚合管道(aggregation pipeline)”。用户能够通过简单的片段创建复杂的聚合,并通过数据库自动优化。
特殊的集合类型:
MongoDB支持存在时间有限的集合,适用于那些将在某个时刻过期的数据,如会话(session)。类似的,MongoDB也支持固定大小的集合,用于保存近期数据,如日志。
文件存储(file storage):
MongoDB支持一种非常易用的协议,用于存储大文件和文件元数据。
MongoDB并不具备一些在关系型数据库中很普遍的功能,如连接(join)和复杂的多事务(multirow transcation)。省略这些功能是出于架构上的考虑(为了得到更好的扩展性),因为在分布式系统中这两个功能难以高效地实现。
4、卓越的性能
MongoDB能对文档尽心动态填充(dynamic padding),也能预分配数据文件以利用额外的空间来换取稳定的新能。MongoDB把尽可能多的内存用作缓存(cache),一般会用尽服务器的可用内存,试图为每次查询自动选择正确的索引。 所以MongoDB会非常占用服务器内存,目前并没有什么办法可以限制MongoDB占用内存的方法,所以一般不建议在MongoDB服务器上启用其他进程。
二、下载安装包
下载地址为:https://www.mongodb.com/download-center?jmp=nav#community
Windows: mongodb-win32-x86_64-2008plus-ssl-3.6.4.zip
Linux(CentOS 7): mongodb-linux-x86_64-rhel70-3.6.4.tgz
注意:这里下载的都是压缩包,本文不提供rpm和msi等可执行程序的安装方式
三、Windows下的MongoDB单节点安装
我们将下载完的包解压:C:/context/mongodb
在工作目录下创建MongoDB数据存放目录:D:/workspaces/mongodbspaces/data
在工作目录下创建MongoDB日志文件:D:/workspaces/mongodbspaces/logs/mongodb.log
在安装目录下创建config目录:C:/context/mongodb/config
在配置目录下创建配置文件:C:/context/mongodb/config/config.conf
修改配置文件
systemLog:
# 日志级别,0:包含“info”信息,1~5,即大于0的值均会包含debug信息。类型: integer,默认: 0
verbosity: 0
# 发送所有的诊断信息日志文件的路径。systemLog.destination为file时有效。类型: string。
path: D:/workspaces/mongodbspaces/logs/mongodb.log
# 如果是true,则mongod服务重启时会将日志追加到日志末尾,否则每次重启会备份已有的日志并创建新日志。
# 类型: boolean。默认: false。
logAppend: true
# 日志输出目的地,可以指定为“file”或者“syslog”,如果指定“file”则必须要设置systemLog.path。
# 如果不指定,则会输出到标准输出中(standard output)。
destination: file
processManagement:
# Windows特有配置选项
windowsService:
# mongos/mongod作为Windows服务时的服务名称,在net start <name>和net stop <name>时使用。
# 类型: string。默认: MongoDB
# 必须与--install 安装服务或者--remove删除服务结合使用。
serviceName: MongoDB
# 在服务管理应用程序中MongoDB服务应用程序的名称。默认: MongoDB
displayName: MongoDB
# 设置MongoDB服务的描述,默认为MongoDB Server,在--install安装服务时使用。
description: MongoDB Server
net:
# mongod/mongos服务侦听客户端连接的端口。类型: int。默认: 27017。
port: 27017
# mongod/monogs应用侦听客户端的IP地址或者完整UNIX域套接字路径,如果想要绑定多个地址使用逗号分隔。
# 若要绑定到所有IPv4地址,请输入0.0.0.0。与net.bindIpAll配置互斥,不能同时配置两个。
# 类型: string。默认: localhost
bindIp: 0.0.0.0
security:
# 打开访问数据库和进行操作的用户角色认证,仅mongod有效。disabled: 关闭; enabled: 开启(默认开启)
authorization: enabled
# 启用或禁用服务器端JavaScript执行,仅mongod有效。
# 如果为false,那么任何与javascript相关的功能都不能使用。类型: boolean。默认: true
javascriptEnabled: true
setParameter:
# 如果开启,则允许本机(localhost/127.0.0.1)第一次访问时不需要密码认证,以便于创建第一个admin数据库的用户
# true/1或者false/0,默认为true。mongods和mongod有效,建议mongod关闭该功能。
enableLocalhostAuthBypass: true
# 认证机制,可选值为“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建议为“SCRAM-SHA-1”
authenticationMechanisms: SCRAM-SHA-1
storage:
# mongod实例存储数据库文件路径,仅mongod有效。类型: string
dbPath: D:/workspaces/mongodbspaces/data
journal:
# 是否开启journal日志持久存储,journal日志用来数据恢复,
# 是mongod最基础的特性,通常用于故障恢复,仅mongod有效。
# 类型: boolean。64bit默认为true,32bit默认为false
enabled: true
# 是否将不同DB的数据存储在不同的目录中,dbPath的子目录,目录名为db的名称,仅mongod有效。
# 类型: boolean。默认: false
directoryPerDB: true
# mongod存储引擎类型,仅mongod有效,可选mmapv1、wiredTiger、inMemory(企业版专用)。3.2之后默认: wiredTiger
engine: wiredTiger
wiredTiger:
engineConfig:
# wiredTiger缓存工作集(working set)数据的内存的最大大小。mmapv1引擎没有改配置,会占用系统所有内存。
# 这个值需要合理的规划,如果过小会影响MongoDB读写性能,如果过大则会大量使用swap甚至进程会被内存管理器kill。
# 单位:GB,默认值最小256M,如果内存大于512M则默认50%。官方推荐不要将值设置为大于默认值。仅mongod有效
cacheSizeGB: 1
# 是否将集合数据和索引数据分两个目录存储,默认: false。仅mongod有效
directoryForIndexes: true
配置mongodb环境变量这里就不赘述了。我们执行命令将MongoDB安装成服务:
mongod.exe --config C:/context/mongodb/config/config.conf --install
如果需要删除MongoDB服务,则需要执行命令:
mongod.exe --config C:/context/mongodb/config/config.conf --remove
如果需要重新安装MongoDB(先卸载再安装),则需要执行:
mongod.exe --config C:/context/mongodb/config/config.conf --reinstall
需要注意的是,这里的--config选项的值必须是绝对路径,也可以使用-f参数后面跟配置文件路径,这些操作都必须是在管理员CMD命令窗口里面完成。至此MongoDB的安装已经完成,我们需要先启动MongoDB服务,然后创建admin数据库下的管理员账号和密码:
C:\Users\Administrator> mongo
...
> use admin
...
> db.createUser({user: "root", pwd: "root", roles: [{role: "root", db: "admin"}]})
...
需要注意的是,由于我们第一次启动之前就已经打开了角色认证功能: security.authorization: enabled,但是初始是没有用户和密码的。MongoDB中 setParameter.enableLocalhostAuthBypass: true 这个配置是默认开启的,使用localhost/127.0.0.1第一次登录的时候可以免去角色认证,但是也仅有一次机会。
四、Linux下的MongoDB单节点安装
我们将下载完的包解压:
[root@abc] tar -zxvf mongodb-linux-x86_64-rhel70-3.6.4.tgz -C /usr/local/
[root@abc] mv /usr/local/mongodb-linux-x86_64-rhel70-3.6.4 /usr/local/mongodb
在工作目录下创建MongoDB数据存放目录:
[root@abc] mkdir /data/mongodb/data -p
在工作目录下创建MongoDB日志文件:
[root@abc] mkdir /data/mongodb/logs/ -p
[root@abc] touch /data/mongodb/logs/mongodb.log
在安装目录下创建config配置文件,并编辑配置文件:
[root@abc] mkdir /usr/local/mongodb/config -p
[root@abc] vim /usr/local/mongodb/config/config.conf
systemLog:
# 日志级别,0:包含“info”信息,1~5,即大于0的值均会包含debug信息。类型: integer,默认: 0
verbosity: 0
# 发送所有的诊断信息日志文件的路径。systemLog.destination为file时有效。类型: string。
path: /data/mongodb/logs/mongodb.log
# 如果是true,则mongod服务重启时会将日志追加到日志末尾,否则每次重启会备份已有的日志并创建新日志。
# 类型: boolean。默认: false。
logAppend: true
# 日志输出目的地,可以指定为“file”或者“syslog”,如果指定“file”则必须要设置systemLog.path。
# 如果不指定,则会输出到标准输出中(standard output)。
destination: file
processManagement:
# 是否以守护进程(后台进程)的方式运行mongod/mongos进程。类型: boolean。默认: false。
fork: true
# 配合"fork:true"参数,将mongod/mongos进程ID写入指定的文件,如果不指定,将不会创建PID文件。类型: string
pidFilePath: /data/mongodb/logs/mongodb.pid
net:
# mongod/mongos服务侦听客户端连接的端口。类型: int。默认: 27017。
port: 27017
# mongod/monogs应用侦听客户端的IP地址或者完整UNIX域套接字路径,如果想要绑定多个地址使用逗号分隔。
# 若要绑定到所有IPv4地址,请输入0.0.0.0。与net.bindIpAll配置互斥,不能同时配置两个。
# 类型: string。默认: localhost
bindIp: 0.0.0.0
security:
# 打开访问数据库和进行操作的用户角色认证,仅mongod有效。disabled: 关闭; enabled: 开启(默认开启)
authorization: enabled
setParameter:
# 如果开启,则允许本机(localhost/127.0.0.1)第一次访问时不需要密码认证,以便于创建第一个admin数据库的用户
# true/1或者false/0,默认为true。mongods和mongod有效,建议mongod关闭该功能。
enableLocalhostAuthB