简介

1·MongoDB 的概述 2·MongoDB 的安装 3·MongoDB 的存储结构 4·MongoDB 的基本操作 5·MongoDB 的日常维护


MongoDB 的概述

1)MongoDB 介绍:

1.MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。


2.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。


3·MongoDB 它不再有 “行” 的概念,之前几篇文章都是在将 MySQL ,所以这里得有一定的区分,MySQL 它有 “行” 的概念,有 “表” 的概念。MongoDB 的运行方式主要基于两个概念:集合与文档。



2)MongoDB 的特点

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

1·面向集合存储,易存储对象类型的数据。 2·模式自由。 3·支持动态查询。 4·支持完全索引,包含内部对象。 5·支持查询。 6·支持复制和故障恢复。 7·使用高效的二进制数据存储,包括大型对象(如视频等)。 8·自动处理碎片,以支持云计算层次的扩展性。 9·支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。 10·文件存储格式为BSON(一种JSON的扩展)。 11·可通过网络访问。


3)MongoDB 的应用场景

1.网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。


2.缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。


3.高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。


4) MongoDB 不适用的场景如下:

1.要求高度事务性的系统。 2.传统的商业智能应用。 3.复杂的跨文档(表)级联查询。


MongoDB 的安装 ----(安装环境:CenOS 7.4)

安装说明:这里就采用 YUM 安装,因为 MongoDB 不存在用编译,yum 更加的方便,它本来就是一个轻量级的数据库


1)搭建 YUM 仓库

[root@localhost ~]# vim /etc/yum.repos.d/mongodb.repo ----(自己配置仓库) 配置内容如下: (文件必须以 repo 结尾)

[mongodb-org] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc


2)更新、重新加载 YUM 仓库

[root@localhost ~]# yum list


**3)安装 MongoDB **

[root@localhost ~]# yum install mongodb-org -y


4)修改、介绍配置文件

[root@localhost ~]# 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 # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile ------(pid进程文件存储位置) timeZoneInfo: /usr/share/zoneinfo


net: ** port: 27017 ------------------(监听端口,可自由配置,最好就默认)** ** bindIp: 0.0.0.0 ------------(监听地址,改为任意网段,也是现在唯一需要修改的地方)**


配置文件如下图:



5) MongoDB 的启动和停止

MongoDB 的启动和停止和别的服务还是有一点区别的,启停方法如下: [root@localhost ~]#** mongod -f /etc/mongod.conf** -----(MongoDB 的启动方法) about to fork child process, waiting until server is ready for connections. forked process: 3393 child process started successfully, parent exiting


[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown -----(停止MongoDB 的服务) killing process with pid: 3393


6)启动 MongoDB 多实例

在单台服务器资源充分的情况下,可以使用多实例,以便从分利用服务器资源。创建步骤如下: 1.创建 MongoDB 另一个实列的日志文件存放路径和文件 [root@localhost ~]# mkdir -p /data/mongodb/logs---(创建新路径) [root@localhost ~]# touch /data/mongodb/logs/mongod2.log ----(新建日志文件) [root@localhost ~]# chmod 777 /data/mongodb/logs/mongod2.log ---(给权限)


2.创建数据存放路径和文件 [root@localhost ~]# mkdir -p /data/mongodb/mongod2 ----(数据存放位子)


3·复制一份主配置文件,并修改日志文件、数据存放位子、端口. [root@localhost ~]# cp -p /etc/mongod.conf /etc/mongod2.conf -----(复制一份著配置文件)


[root@localhost ~]# vim /etc/mongod2.conf -----(修改第二份配置文件) 修改内容如下:-----(修改内容会用加粗方式显示) #where to write logging data. systemLog: destination: file logAppend: true

path: /data/mongodb/logs/mongod2.log --------(修改日志文件位子

#Where and how to store data. storage: ** dbPath: /data/mongodb/mongod2** ------(数据存放路径改为我们自己创建的,必须是一致的,否则启动服务会失败) journal: enabled: true #engine: #mmapv1: #wiredTiger:

#how the process runs processManagement: fork: true # fork and run in background

pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile**----(PID文件是不能修改的。)** timeZoneInfo: /usr/share/zoneinfo

#network interfaces net:

port: 27018 -----(端口号不能一样,需要修改) bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces


4·配置文件修改完毕后启动这个新创建的实例 > [root@localhost ~]# mongod -f /etc/mongod2.conf ------(启动一个实列) about to fork child process, waiting until server is ready for connections. forked process: 44277 child process started successfully, parent exiting


MongoDB 的存储结构

1)MongoDB 逻辑存储结构

MongoDB 的逻辑结构主要由文档、集合和数据库三部分组成。其中文档是 MongoDB 的核心概念,就是相当于之前 MySQL 数据库中的一行记录,多个文档组成集合,什么是集合,集合相当于 MySQL 中表的概念,多个集合就会组成数据库


下表是 MongoDB 中的一些专业术语及说明


SQL 术语 / 概念 MongoDB 术语 / 概念 解释 / 说明
database database 数据库
table collection 数据库表 / 集合
row document 数据记录行 / 文档
column field 数据字段 / 域
index index 索引
table joins 表连结,MongoDB 是不支持的
primary key primary key 主键,MongoDB 自动将 _ id 字段设置主键

MongoDB 基本操作

MongoDB 基本操作主要是对数据库、集合、文档的操作,包括创建数据库、删除、插入文档、更改文档、删除文档和查询文档。(增、删、改、查)


下表会列出一些 MongoDB 中常用的基本操作


操作 描述
show dbs 查看当前实例下的数据库列表
show users 显示用户
use < db_name > 切换当前数据库
db.help() 显示数据库操作命令
show collections 显示当前数据库中的集合
db.foo.help() 显示集合操作命令,foo 是当前数据库下的集合
db.foo.find() 对当前数据库中 foo集合进行数据查找

1)MongoDB 创建和删除数据库

[root@localhost ~]# mongo ------(进入 MongoDB ) [root@localhost ~]# mongo --port 27018 ----(进入 MongoDB 的另一个实列,需要加上端口号,27017是默认实列的端口号,所以不要跟 )


** use kgc** -----(切换到指定的数据库,如果这个库不存在,则创建此数据库,当然需要在此库中写入数据)


db.school.insert({"id":1,"name":"tom"}) ----(在school集合中插入一条数据) WriteResult({ "nInserted" : 1 }) ** show tables;** -----(查看当前数据库中的集合) school db.school.find() ---- (查看school集合中的数据) { "_id" : ObjectId("5b9a205cffcff6addaa51730"), "id" : 1, "name" : "tom" } **db.school.remove({"id":1}) -----(移除school中的第一条数据) db.school.drop() ------(删除school集合)


2)数据的导入和导出

导入和导出可以使用命令 mongoexport 和 mongoimport 命令来导出和导入 MongoDB的数据


1·先添插入20条数据,用作数据的导出和导入 for(var i=1;i<=20;i++)db.school.insert({"id":i,"name":"tom"+i}) ---(在school集合中插入20条数据,这里使用循环插入)


2·开始导出数据 [root@localhost ~]# mongoexport -d kgc -c school -o /opt/school.json ----(把kgc库中school集合的数据导出到 /opt 命名为school.json,这里的格式必须是json格式)


[root@localhost ~]# vim /opt/school.json -----(查看是否导入成功,如下图)



3·开始导入数据 [root@localhost ~]# mongoimport -d kgc -c abc --file school.json ----(导入数据,导入的集合的名称为:abc)



4·备份与恢复 [root@localhost ~]# mkdir /backup [root@localhost ~]# mongodump -d kgc -o /backup/ ----(创建一个目录,备份kgc这个库) [root@localhost ~]# mongorestore -d kgc2 --dir /backup/kgc/ ----(恢复这个kgc这个库,且命名为kgc2)


5·克隆集合 在 MongoDB 中可以将数据库中的集合进行克隆,这里将 kgc 数据库中的school 集合克隆到另一个实列:

db.runCommand({"cloneCollection":"kgc.school","from":"192.168.106.154:27017"}) ----(这样可以实现多个实例之间的集合共享)


6·复制数据库

db.copyDatabase("kgc","kgc2","localhost") -----(复制数据库 kgc 到本地 命名为 kgc2)


7·进程管理 管理员可以对 MongoDB 进程进行管理和控制,查看当前正在运行的进程的命令为:db.currentOp() 终止正在运行的高消耗资源的进程命令为:db.killop(337) -----(找到opid号填入)


进程查询结果和opid号会在下图展现出来



总结

1·在创建库和集合时,没有就可以直接进入,系统直接会创建,这点很方便,和 MySQL 比较很方便 2·安装 MongoDB 、实列比较与 MySQL 很方便 3·MongoDB 可以实现高性能、高可用,并且能够轻松扩展 4·MongoDB 的基本操作主要时对数据库、集合、文档的操作 5·MongoDB 提供了复制、高可用性和自动分片功能,支持丰富表达方式 6·MongoDB 可以和 MySQL 做一个比较,有兴趣的朋友可以看看之前的文章:MySQL 读写分离MySQL 的高可用群集MySQL 的备份