NOSQL之REDIS、MONGODB

一、关于REDIS
1.介绍
2.特点
3.主从复制原理及缺点
4.操作指令
5.持久化方式

(1)介绍:

*redis directory server(远程字典服务器)
*使用C语言编写的,遵守BSD的开源软件
*是一款key/values分布式内存数据库
*支持数据持久化的NOSQL数据库服务软件
*中文网站www.redis.cn

(2)特点

*支持数据持久化,把内存里的数据保存到硬盘
*不仅仅支持key/values类型的数据,还支持list、set、zset、hash类型
*支持master-slave复制模式

(3)主从复制原理

*slave向master发送sync请求
*master启动后台存盘进程,收集修改数据的操作存到硬盘
*master收集完成之后,发送给salve,slave接受加载到内存完成首次完全同步
*后续有新数据产生时,master会陆续发给slave完成同步
**缺点:网络繁忙和系统繁忙时会造成数据同步延时

(4)操作指令

*set key value(存储)
*get key(获取)
*select 0-15(切换库)
*keys(显示所有变量)
*keys a?(显示指定变量)
*exits key(测试是否存在)
*ttl key(查看生存时间)
*type key(查看类型)

(5)持久化方式(RDB、AOF)

*RDB介绍:(1)全称redis database
		(2)按照指定的时间间隔,将内存的数据集体快照写入硬盘
		(3)术语叫snapshot
		(4)恢复时,将快照直接读入内存
*RDB优点:(1)持久化时,redis自己不需要创建RDB文件,他会开启一个子进程用来创建RDB文件,当子进程创建完成之后并退出时,会向父进程发送一个信号告知RDB文件已经创建完成,这时候父进程接手RDB文件并替换掉旧的RDB文件,整个过程redis父进程不需要任何的IO操作,这就保证了服务极高的性能。
		(2)如果要进行大规模的数据恢复时,且对数据的完整度要求不是非常高的时候,使用RDB比AOF效率高。
*RDB缺点:(1)服务器故障时,最后一次持久化的数据将会丢失
####################################################
*AOF介绍:(1)全称Append only file
			(2)只做追加操作的文件
			(3)记录redis服务所有写记录的操作
			(4)不断的将新的写操作追加到文件的末尾
			(5)使用cat命令可以查看文件的内容
*AOF优点:(1)可以灵活的设置同步持久化(appendfsync always)和异步持久化(appendfsync everysec)
		(2)故障时,仅可能丢失一秒的数据
*AOF缺点:(1)由于不断的做追加操作,通常AOF文件的体积要比RDB大,执行fsnc策略时要比RDB慢。

#######################################################################
二、关于MONGODB
1.介绍
2.特点
3.数据库命名规则
4.常用命令
5.集合管理命令
6.文档基本管理命令
7.基本数据类型
8.数据导入和导出
9.数据备份
10.副本集是什么
11.副本集工作过程
#################
1.介绍

(1)是一款介于RDBMS和NOSQL之间的数据库软件,基于分布式文件存储的数据库
(2)使用C++语言编写,旨在为WEB应用提供可扩展的高性能数据库解决方案
(3)将数据存储为文档。数据结构由键值(key=>value)对组成
(4)文档类似于JSON对象,字段值可以包括其他文档、数组及文档数组

2.特点

(1)安装简单
(2)面向文档存储,操作容易
(3)支持丰富的查询表达,可设置任何属性的索引
(4)支持主流的编程语言RUBY|PYTHON|JAVA|PHP|C++	
(5)支持副本集、分片

3.数据库命名规则

(1)不能是空字符
(2)不得含有‘’ (空格)、. 、$、/、\、和\0(空字符)
(3)全部小写
(4)最多64字节

4.常用命令

(1)show dbs(查看已有的库)
(2)db(显示当前库)
(3)use 库名(切换库,若库不存在,自动延时创建库)
(4)show collections或show tables(查看库下已有的集合)
(5)drop.dropdatabase()(删除当前所在的库)

5.集合管理命令
查看、创建、删除

(1)show collections或show tables(查看集合)
(2)db.集合名.drop() (删除集合)
(3)db.集合名.save({"",""})  (创建集合,若集合不存在创建并添加文档)

6.文档基本管理命令
查看、统计、添加、删除

(1)db.集合名.find()
(2)db.集合名.count()
(3)db.集合名.insert({name:"jim"})
(4)db.集合名.find({条件})
(5)db.集合名.findOne() (返回一条文档)
(6)db.集合名.remove({}) (删除所有文档)
(7)db.集合名.remove({条件})  (删除与条件匹配的文档)

7.基本数据类型
(1)字符string/布尔bool/空null

*字符串string
-UTF-8字符串都可以表示为字符串类型的数据
-{name:"张三"}或{school:"yizhong"}
*布尔bool
-布尔类型有两个值true和false,{x:true}
*空null
-用于表示空值或不存在的字段  {x:null}

(2)数值/数组array

*数值
-shell默认使用64位浮点型数值{x:3.14}或{x:3}
-NumberInt(4字节整数) {x:NumberInt(3)}
-NumberInt(8字节整数) {x:NumberInt(3)}
*数组array
-数据列表或数据集可以表示位数组
-{x:["a","b","c"]}

(3)代码/日期/对象

*代码
-查询和文档中可以包含JavaScript代码
-{x:function(){/*代码*/}}
*日期
-日期被存储为自新纪元依赖经过的毫秒数,不存储时区
-{x:new Date()}
*对象
-对象id是一个12字节的子字符串,是文档的唯一标识
-{x:ObjectId()}

(4)内嵌/正则表达式

*内嵌
-文档可以嵌套其他的文档,被嵌套的文档作为值来处理
-{yizhong:{address:"beijing",tel:888,person:"natasha"}}
*正则表达式
-查询时,使用正则表达式作为限定条件
-{x:/正则表达式/}

8.数据导出
(1)导出

*语法格式1:#mongoexport [--host IP地址 --port 端口] -d 库名  -c 集合名  -f 字段名1 ,字段名2  --type=csv > 目录名/文件名.csv
*语法格式2:#mongoexport [--host IP --port 端口]  -d 库名  -c 集合名  -q '{条件}' -f 字段名1 ,字段名2  --type=csv > 目录名/文件名.csv
*语法格式3:#mongoexport [--host IP地址 --port 端口] -d 库名  -c 集合名 [-q '{条件}' -f 字段列表]  --type=json > 目录名/文件名.json

(2)导入

*语法格式1:#mongoimport --host IP --port 端口   -d 库名  -c 集合名 --type=json 目录名/文件名.json
*语法格式2:#mongoimport --host IP --port 端口  -d 库名  -c 集合名 --type=csv --hearerline [--drop] 目录名/文件名.csv

9.数据备份
(1)备份数据所有库到当前目录下的dump目录下

#mongodump [--host IP --port 端口]

(2)备份时指定备份的库和备份目录

#mongodump [--host IP --port 端口] -d 库名  -c 集合名  -o 目录
(目录无需创建,备份时指定即可!!!!)

(3)查看bson文件内容

#bsondump ./dump/bbs/t1.bson

10.副本集是什么

-Mongodb复制是将数据同步在多个服务器的过程
-复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,保证数据的安全。

11.副本集工作过程

-mongodb的复制至少需要两个节点,其中一个是主节点,负责处理客户端的请求,其余的都是从节点,负责复制主节点上的数据
-mongodb各个节点常见的搭配方式:一主一从、一主多从
-主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证主从节点的数据一致。

猜你喜欢

转载自blog.csdn.net/qq_44839276/article/details/90604362