文章目录
- 1.1 NoSQL 概念与发展
- 1.2 为什么使用NoSQL
- 1.3 与SQL的联系与区别
- 1.4 拓展 - CAP定理
- 1.5 拓展 - BASE & ACID
- 1.6 NoSQL数据库分类
一、认识NoSQL
1.1 NoSQL 概念与发展
NoSQL
指的是非关系型的数据库。NoSQL
有时也称作Not Only SQL
的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌
或Facebook
每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
NoSQL一词最早出现于1998年,是Carlo Strozzi
开发的一个轻量、开源、不提供SQL
功能的关系数据库。
2009年,Last.fm
的Johan Oskarsson
发起了一次关于分布式开源数据库的讨论,来自Rackspace
的Eric Evans
再次提出了NoSQL
的概念,这时的NoSQL
主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)"
讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"
。因此,对NoSQL
最普遍的解释是"非关联型的"
,强调Key-Value Stores
和文档数据库
的优点,而不是单纯的反对RDBMS
。
1.2 为什么使用NoSQL
今天我们可以通过第三方平台(如:Google
,Facebook
等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库
已经不适合这些应用了, NoSQL
数据库的发展却能很好的处理这些大的数据。
返回顶部
1.3 与SQL的联系与区别
- 结构化(表) & 非结构化(K-V、文档、图)
- 关联的 & 非关联
- SQL查询 & 非SQL
- ACID(事务) & BASE(无事务)
总结:
- 性能肯定是内存更高
- 垂直是指SQL设计之初没有考虑到数据的分片存储,都是存贮在本地机器上,虽然支持主从但是并没有提升数据的量(仅备份层面);水平是指考虑到了分片需求,根据id通过哈希算法获取标识,将数据存储在指定的节点上
返回顶部
1.4 拓展 - CAP定理
在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer’s theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性(Consistency)(所有节点在同一时间具有相同的数据)
- 可用性(Availability)(保证每个请求不管成功或者失败都有响应)
- 分隔容忍(Partition tolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
- CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
- CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
- AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
返回顶部
1.5 拓展 - BASE & ACID
BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:
- Basically Available --基本可用
- Soft-state --软状态/柔性事务。 “Soft state” 可以理解为"无连接"的, 而 “Hard state” 是"面向连接"的
- Eventually Consistency – 最终一致性, 也是 ACID 的最终目的。
ACID | BASE |
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 软状态/柔性事务(Soft state) |
隔离性(Isolation) | 最终一致性 (Eventual consistency) |
持久性 (Durable) |
返回顶部
1.6 NoSQL数据库分类
类型 | 部分代表 | 特点 |
列存储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩, 对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引, 实现关系数据库的某些功能。 |
K-V存储 | Tokyo Cabine t / Tyrant BerkeleyDB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
对象存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
xml数据库 | Berkeley DB XMLBaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
返回顶部
二、认识Redis
Redis
诞生于2009年全称是Remote Dictionary Server
,远程词典服务器,是一个基于内存的键值型NoSQL数据库。
“兄弟们,SQL性能不太好,咱们来重新写一个~”
特征:
- 键值(key-value)型,value支持多种不同数据结构,功能丰富
- 单线程,每个命令具备原子性 (6.0单纯网络请求部分为多线程)
- 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
- 支持数据持久化
- 支持主从集群、分片集群
- 支持多语言客户端
返回顶部
三、安装Redis
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7.
Redis的官方网站地址:https://redis.io/
1.单机安装Redis
1.1 安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
1.2 上传安装包并解压
然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:
例如,我放到了/usr/local/src 目录:
解压缩:
解压后:
进入redis目录:
运行编译命令:
如果没有出错,应该就安装成功了。
默认的安装路径是在 /usr/local/bin
目录下:
该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
-
redis-cli
:是 redis 提供的命令行客户端 -
redis-server
:是 redis 的服务端启动脚本 -
redis-sentinel
:是 redis 的哨兵启动脚本
返回顶部
1.3 启动
redis的启动方式有很多种,例如:
- 默认启动
- 指定配置启动
- 开机自启
1.3.1 默认启动
安装完成后,在任意目录输入redis-server
命令即可启动Redis
:
如图:
这种启动属于前台启动
,会阻塞整个会话窗口,窗口关闭或者按下CTRL + C
则Redis停止。不推荐使用。
返回顶部
1.3.2 指定配置启动
如果要让Redis以后台
方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(/usr/local/src/redis-6.2.6
),名字叫redis.conf
:
我们先将这个配置文件备份一份:
然后修改redis.conf文件中的一些配置:
Redis的其它常见配置:
启动Redis:
查看Redis启动进程:
停止服务:
返回顶部
1.3.3 开机自启
我们也可以通过配置来实现开机自启。
首先,新建一个系统服务文件:
内容如下:
然后重载系统服务:
现在,我们可以用下面这组命令来操作redis了:
执行下面的命令,可以让redis开机自启:
返回顶部
2.Redis客户端
安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括:
- 命令行客户端
- 图形化桌面客户端
- 编程客户端
2.1 Redis命令行客户端
Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:
其中常见的options有:
-
-h 127.0.0.1
:指定要连接的edis
节点的IP地址,默认是127.0.0.1
-
-p 6379
:指定要连接的redis
节点的端口,默认是6379
-
-a 123456
:指定redis
的访问密码
其中的commonds就是Redis的操作命令,例如:
-
ping
:与redis服务端做心跳测试,服务端正常会返回pong
不指定commond时,会进入redis-cli
的交互控制台:
返回顶部
2.2 图形化桌面客户端
GitHub上的大神编写了Redis的图形化桌面客户端,地址:https://github.com/uglide/RedisDesktopManager
不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。
在下面这个仓库可以找到安装包:https://github.com/lework/RedisDesktopManager-Windows/releases
2.2.1 安装
在课前资料中可以找到Redis的图形化桌面客户端:
解压缩后,运行安装程序即可安装:
安装完成后,在安装目录下找到rdm.exe文件:
双击即可运行:
返回顶部
2.2.2 建立连接
点击左上角的连接到Redis服务器
按钮:
在弹出的窗口中填写Redis服务信息:
点击确定后,在左侧菜单会出现这个链接:
点击即可建立连接了:
Redis默认有16个仓库,编号从0至15. 通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。
如果是基于redis-cli连接Redis服务,可以通过select命令来选择数据库:
返回顶部
2.2.3 简单使用
使用图形化界面,点击 + 创建键值对数据进行存储。
在命令行客户端进行数据的访问,首先选择库编号为1,然后使用get key去获取键名:
返回顶部