NoSQL 概述
NoSQL = Not Only SQL
,泛指非关系型数据库
关系型数据库:由表格组成,通过行和列记录数据
但是很多数据,如社交网络,地理位置等的存储并不需要一个固定的格式
NoSQL
的特点:
- 方便扩展(数据之间没有关系,很好扩展)
- 大数据高性能(
Redis
一秒写8万次,读取11万次;NoSQL
的缓存记录级,是一种细粒度的缓存,性能会比较高) - 数据类型是多类型的(不需要事先设计数据库!随取随用!)
- 传统的
RDBMS
和NoSQL
传统的RDBMS
:
- 结构化组织
SQL
- 数据和关系都存在单独的表中
- 数据操作语言、数据定义语言
- 严格的一致性
- 基础的事务
- …
NoSQL
:
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储、列存储、文档存储、图形数据库(社交关系)
- 最终一致性
- CAP 定理 和 BASE (异地多活)
- 高性能、高可用、高扩展
- …
大数据的 3V 和 3高:
3V 描述问题:
- 海量 Volumn
- 多样 Variety
- 实时 Velocity
3高 对程序的要求:
- 高并发
- 高可扩
- 高性能
NoSQL 的四大分类:
KV
键值对
文档型数据库(bson
格式和 json
一样)
MongoDB
:
-
MongoDB
是一个基于分布式文件存储的数据库,C++ 编写,主要用来处理大量的文档 -
MongoDB
是一个介于关系型数据库和非关系型数据库中间的产品 -
MongoDB
是非关系型数据库中功能最丰富,最像关系型数据库的
列存储数据库
- HBase
- 分布式文件系统
图关系型数据库
存放关系,比如:朋友圈社交网络,广告推荐
分类 | examples | 应用场景 | 数据模型 | 优点 | 缺点 |
键值对(Key-Value) | Redis、Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等 | Key 指向 Value 的键值对,通常用 hash table 来实现 | 查找速度快 | 数据无结构化,通常只被当做字符串或者二进制数据 |
列存储数据库 | HBase、Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存放在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | CouchDB、MongoDB | Web 应用(与 Key-Value 类似,Value 是结构化的,不同的是数据库能够了解 Value 的内容) | Key-Value 对应的键值对,Value 为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语句 |
图形数据库 | Neo4J、InfoGrid、Infinite Graph | 社交网络,推荐系统等,专注于构建关系图谱 | 图结构 | 利用图结构相关算法,比如最短路径寻址,N 度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案 |
Redis 入门
Redis = Remote Dictionary Server
,即远程字典服务;
是一个开源的使用 ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value
数据库,并提供多种语言的 API
是热门的 NoSQL
技术之一,也被称为结构化数据库
与 memcached
一样,为了保证效率,数据都是缓存在内存中
区别是 Redis
会 周期性地 把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave
(主从) 同步
Redis
应用
- 内存存储、持久化,内存中是断电即失,所以说持久化很重要(
rdb
、aof
) - 效率高,可以用于高速缓存
- 发布订阅系统
- 地图信息分析
- 计时器、计数器(浏览器)
- …
rdb
:
在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot);
实际操作过程是fork()
一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储
aof
:
以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录
具体分析,可以参考 RDB 与 AOF 使用分析
Redis
特性
- 多样的数据类型
- 持久化
- 集群
- 事务
- …
Windows 下安装 Redis
- Windows 版本 Redis 安装包连接:
https://pan.baidu.com/s/1kgvccrEYZaEJTLixWp3L_w 提取码:mj9a
复制这段内容后打开百度网盘手机App,操作更方便哦 - 下载完成,在安装目录下解压缩,可以看到
- 开启 Redis,双击
redis-server.exe
即可
在这里可以看到 Redis 的版本号:3.2.100 64 bit;也可以看到 Redis 的默认端口号:6379 - 使用 Redis 客户端连接服务器,双击
redis-cli.exe
即可ping
后出现了PONG
,表示已经连接成功
Linux 安装 Redis
- 安装 CentOS 链接:CentOS 7 的下载链接 提取码:5ep6
复制这段内容后打开百度网盘手机App,操作更方便哦 - 安装 CentOS 教程可以看以下链接 安装 CentOS
- 下载安装包 Redis(linux版) 下载链接 ;然后通过 WSCP 移动到 CentOS 的 opt 目录下
- 解压缩,
tar -zxvf redis-5.0.7.tar.gz
;解压缩之后,可以在相应的目录下看到文件的存在redis-5.0.7
cd redis-5.0.7
进入解压后的文件,可以看到对应的配置文件;- 安装基本的配置环境
yum install gcc-c++
;
中间可能需要输入y
,表示同意继续安装;
之后可以通过ggc -v
,查看是否安装成功 - 之后可以输入
make
命令,等待它自己加载所需要的东西;可以看到如下结果
之后,再make
一下
- 最后,
make install
;可以看到所有的环境都可以了 - redis 的默认安装路径是
/usr/local/bin
- 将 Redis 配置文件复制到我们当前目录
- Redis 默认不是后台启动的,需要修改配置文件;
daemonize no
改为daemonize yes
- 通过我们之前设置好的配置文件启动
- 检查是否连接成功,并测试
- 新开启一个虚拟机的连接,然后查看 Redis 的进程是否开启
- 关闭 Redis
- 再次查看进程是否存在