码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 的对立面轻量级之 MongoDB 数据库

时间:2018-09-14 10:56:47      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:区别   之间   服务器组   朋友   利用   drop   分布式   har   comment   

简介

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 的备份

MySQL 的对立面轻量级之 MongoDB 数据库

标签:区别   之间   服务器组   朋友   利用   drop   分布式   har   comment   

原文地址:http://blog.51cto.com/13746824/2174874

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!