目录
- 一、关系数据库的缺点
- 二、常见的 NoSQL 方案分 类
- 2.1、K-V 存储
- 2.2、文档数据库
- 2.3、列式数据库
- 2.4、全文搜索引擎
- 三、高性能 NoSQL 方案的典型特征和应用场景
- 3.1、K-V 存储典型特征和应用场景
- 3.2、文档数据库典型特征和应用场景
- 3.1.1、文档数据库的 no-schema 特性的优势
- 3.1.2、文档数据库的 no-schema 特性的劣势
- 3.3、列式数据库典型特征和应用场景
- 3.4、全文搜索引擎典型特征和应用场景
- 3.4.1、全文搜索基本原理
- 3.4.2、全文搜索的使用方式
本文来源:极客时间vip课程笔记
一、关系数据库的缺点
-
关系数据库存储的是行记录,无法存储数据结构
以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。
-
关系数据库的 schema 扩展很不方便
关系数据库的表结构 schema 是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行 DDL(data definition language,如 CREATE、ALTER、DROP 等)语句修改,而且修改时可能会长时间锁表(例如,MySQL 可能将表锁住 1 个小时)。
-
关系数据库在大数据场景下 I/O 较高
如果对一些大量数据的表进行统计之类的运算,关系数据库的 I/O 会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。
-
关系数据库的全文搜索功能比较弱
关系数据库的全文搜索只能使用 like 进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。
二、常见的 NoSQL 方案分 类
2.1、K-V 存储
- 解决关系数据库无法存储数据结构的问题,以 Redis 为代表。
2.2、文档数据库
- 解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。
2.3、列式数据库
- 解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。
2.4、全文搜索引擎
- 解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。
三、高性能 NoSQL 方案的典型特征和应用场景
3.1、K-V 存储典型特征和应用场景
-
K-V 存储的全称是 Key-Value 存储,其中 Key 是数据的标识,和关系数据库中的主键含义一样,Value 就是具体的数据。
-
Redis 是 K-V 存储的典型代表,它是一款开源(基于 BSD 许可)的高性能 K-V 缓存和存储系统。Redis 的 Value 是具体的数据结构,包括 string、hash、list、set、sorted set、bitmap 和 hyperloglog,所以常常被称为数据结构服务器。
-
以 List 数据结构为例,Redis 提供了下面这些典型的操作(更多请参考链接:http://redis.cn/commands.html#list):
LPOP key 从队列的左边出队一个元素。
LINDEX key index 获取一个元素,通过其索引列表。
LLEN key 获得队列(List)的长度。
LLEN key 获得队列(List)的长度。
-
以上这些功能,如果用关系数据库来实现,就会变得很复杂。例如,LPOP 操作是移除并返回 key 对应的 list 的第一个元素。如果用关系数据库来存储,为了达到同样目的,需要进行下面的操作:
每条数据除了数据编号(例如,行 ID)