DBA MongoDB 基础学习
前言
MongoDB的官方文档非常全面,可供开发者进行查阅:MongoDB中文文档
同时,本系列笔记将会按照MongoDB权威指南一书中的重点进行归类,方便读者学习。
MongoDB简介
基础概念
MongoDB被誉为是最像SQL的NoSQL,也是非关系数据库中最火热的产品,甚至MySQL中都能见到MongoDB的很多设计理念。
下面是一些MongoDB与SQL之间概念的一些差异:
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
值得一提的是,MongoDB中支持事务,这是其他很多NoSQL都不支持的。
版本介绍
MongoDB第一版在2009年面世,由DoubleClick公司(2013年时已更名MongoDB)开发,一经推出就引起了轩然大波,因为它结束了关系型数据库产品对行业的统治,目前版本种类较少,主流版本为4.x,那么在接下来我们也将使用目前较新的4.2版本进行学习(系统为Centos7.3)。
下面是MongoDB的版本形式,摘自官网:
MongoDB的版本的形式X.Y.Z,其中X.Y指的是一个版本系列或开发系列,而Z指修订/补丁号。
- 如果Y是偶数,则X.Y指发布系列;例如, 4.0发行系列和4.2发行系列。发布系列稳定且适合生产。
- 如果Y是奇数,则X.Y指一个开发系列;例如, 4.1开发系列和4.3开发系列。开发系列仅用于测试而不是生产。
例如,在MongoDB版本中4.0.12,4.0指的是发行系列,而.12指的是修订版。
与SQL区别
MongoDB中数据基本单元名为文档,一个文档相当于SQL中的一条记录行。
而集合可以将它与SQL中的表进行一个对应关系。
MongoDB中自带了一个由JavaScript编写的shell,能够管理MongoDB实例和操作数据
对于文档来说,每一个文档都有一个特殊的_id键,非空且唯一,与SQL中的主键相同
在MongoDB中,更加注重数据的整体存放,而不同于SQL中分表的概念,如下是对多表关系进行存储时MongoDB与MySQL的一些差异。
# MySQL多表关系存储:
---------------------------------------
| id | name | age | gender | grades |
---------------------------------------
| 1 | Jack | 18 | male | 1 |
---------------------------------------
-----------------------------
| id | Js | Py | Go |
-----------------------------
| 1 | 88 | 96 | 78 |
-----------------------------
# MongoDB多表关系存储:
{
"_id" : ObjectId("uuid")
"id" : "1",
"name" : "Jack",
"age" : "18",
"gender" : "male",
"grades" : {
"Js" : "88",
"Py" : "96",
"Go" : "78",
}
}
安装MongoDB
系统准备
系统为Centos7.3,在此之前需要做一些准备:
-
关闭防火墙:
T > systemctl stop firewalld T > systemctl disable firewalld
-
关闭SElinux:
T > setenforce 0 T > vim /etc/selinux/config SELINUX=disabled
-
关闭大页内存机制,以提高MongoDB的性能:
T > vim /etc/rc.local # 最后添加 if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
配置目录
我们需要三个目录来存放MongoDB服务的不同的数据:
T > mkdir -p /usr/local/mongodb/conf
T > mkdir -p /usr/local/mongodb/logs
T > mkdir -p /usr/local/mongodb/data
软件下载
点我跳转至下载页,选择好版本后进行下载,在这里我们选择免编译版本的tgz格式:
你也可以使用wget命令,进行下载:
T > cd ~
T > wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.12.tgz
免编译安装
在下载完成后,执行解压命令,解压至当前路径下,并将bin目录拷贝走:
T > tar -zxvf mongodb-linux-x86_64-rhel70-4.2.12.tgz
T > cp -a ~/mongodb-linux-x86_64-rhel70-4.2.12/bin /usr/local/mongodb/
T > mv ~/mongodb-linux-x86_64-rhel70-4.2.12 /usr/local/tmp
用户与授权
创建管理和使用MongoDB目录的用户:
T > groupadd mongod
T > useradd -g mongod mongod
对目录进行授权:
T > chown -R mongod:mongod /usr/local/mongodb
环境变量
将MongoDB存放至环境变量中:
T > vim /etc/profile
export PATH=/usr/local/mongodb/bin:$PATH
T > source /etc/profile
配置文件
MongoDB的配置文件会比较复杂,使用以下配置文件进行简单的配置:
T > vim /usr/local/mongodb/conf/mongod.conf
systemLog:
destination: file
path: "/usr/local/mongodb/logs/mongod.log"
logAppend: true
storage:
dbPath: "/usr/local/mongodb/data"
journal:
enabled: true
processManagement:
fork: true
net:
bindIp: 0.0.0.0
port: 27017
setParameter:
enableLocalhostAuthBypass: false
常规服务
使用常规的操作来开启MongoDB的服务进程,指定配置文件启动:
T > mongod -f /usr/local/mongodb/conf/mongod.conf
# 亦可使用 --conifg参数
关闭MongoDB的服务进程:
T > mongod -f /usr/local/mongodb/conf/mongod.conf --shutdown
登录MongoDB:
T > mongo
M > exit
sys服务
使用sys服务管理MongoDB,执行如下操作:
T > cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Group=mongod
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongod.conf
ExecReload=/bin/kill -s HUP
ExecStop=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongod.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
重新进行授权操作,至此sys服务制作完成:
T > chown -R mongod:mongod /usr/local/mongodb
设置和关闭开机启动(可选):
T > systemctl enable mongod.service
T > systemctl disable mongod.service
下面就可以通过sys服务来启动和管理MongoDB服务了:
T > systemctl start mongod.service
T > systemctl stop mongod.service
T > systemctl restart mongod.service
T > systemctl status mongod.service