MySQL 的对立面轻量级之 MongoDB 数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 的对立面轻量级之 MongoDB 数据库相关的知识,希望对你有一定的参考价值。
简介
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 仓库
[[email protected] ~]# 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 仓库
[[email protected] ~]# yum list
3)安装 MongoDB
[[email protected] ~]# yum install mongodb-org -y
4)修改、介绍配置文件
[[email protected] ~]# 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 的启动和停止和别的服务还是有一点区别的,启停方法如下:
[[email protected] ~]# 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
[[email protected] ~]# mongod -f /etc/mongod.conf --shutdown -----(停止MongoDB 的服务)
killing process with pid: 3393
6)启动 MongoDB 多实例
在单台服务器资源充分的情况下,可以使用多实例,以便从分利用服务器资源。创建步骤如下:
1.创建 MongoDB 另一个实列的日志文件存放路径和文件
[[email protected] ~]# mkdir -p /data/mongodb/logs---(创建新路径)
[[email protected] ~]# touch /data/mongodb/logs/mongod2.log ----(新建日志文件)
[[email protected] ~]# chmod 777 /data/mongodb/logs/mongod2.log ---(给权限)
2.创建数据存放路径和文件
[[email protected] ~]# mkdir -p /data/mongodb/mongod2 ----(数据存放位子)
3·复制一份主配置文件,并修改日志文件、数据存放位子、端口.
[[email protected] ~]# cp -p /etc/mongod.conf /etc/mongod2.conf -----(复制一份著配置文件)
[[email protected] ~]# 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·配置文件修改完毕后启动这个新创建的实例
> [[email protected] ~]# 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 创建和删除数据库
[[email protected] ~]# mongo ------(进入 MongoDB )
[[email protected] ~]# 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·开始导出数据
[[email protected] ~]# mongoexport -d kgc -c school -o /opt/school.json ----(把kgc库中school集合的数据导出到 /opt 命名为school.json,这里的格式必须是json格式)
[[email protected] ~]# vim /opt/school.json -----(查看是否导入成功,如下图)
3·开始导入数据
[[email protected] ~]# mongoimport -d kgc -c abc --file school.json ----(导入数据,导入的集合的名称为:abc)
4·备份与恢复
[[email protected] ~]# mkdir /backup
[[email protected] ~]# mongodump -d kgc -o /backup/ ----(创建一个目录,备份kgc这个库)
[[email protected] ~]# 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 的备份
以上是关于MySQL 的对立面轻量级之 MongoDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章