16 架构设计 - 高性能 NoSQL
- 关系型数据库缺点
- 1. 关系数据库存储的是行记录,无法存储数据结构
- 如:'我关注的人' 是一个用户 ID 列表,关系型只能讲列表拆成多行,再查出来组装,无法直接存储一个列表
- 2. 关系数据库的 schema 扩展很不方便
- 表结构的 schema 是强约束,操作不存在的列会报错
- 3. 关系数据库在大数据场景下 I/O 较高
- 对大量数据的表进行统计之类计算时,即使只针对其中某一列进行运算
- 关系数据库也会将 整行数据 从 存储设备 读入 内存
- 4. 关系数据库的全文搜索功能比较弱
- 全文搜索只能使用 like 进行整表扫描匹配,性能非常低
- NoSQL 解决方案
- Not Only SQL
- 带来的优势,本质上是牺牲 ACID 中的某个或某几个特性
- NoSQL 四类方案
- 1. K-V 存储:解决关系数据库 无法 存储数据结构的问题,以 Redis 为代表
- 2. 文档数据库:解决关系数据库 强 Schema 约束问题,列可变,以 MongoDB 为代表
- 3. 列式数据库:解决关系数据库 大数据场景下 I/O 问题,只读取某列数据时,不需将所有行数据都读出来,以 HBase 为代表
- 4. 全文搜索引擎:解决关系数据库全文搜索性能问题,以 Elasticsearch 为代表
- 数据库选型
- 1. 管理型系统,如运营类系统,关系型
- 2. 大流量系统,如电商单品页的某个服务,后台选关系型,前台选内存型
- 3. 日志型系统,原始数据选列式,日志搜索选倒排索引
- 4. 搜索型系统,指站内搜索,非通用搜索,如商品搜索,后台选关系型,前台选倒排索引
- 5. 事务型系统,如库存、交易、记账,选关系型+缓存+一致性协议,或新型关系数据库
- 6. 离线计算,如大量数据分析,列式,关系型也可以
- 7. 实时计算,如实时监控,可以选时序数据库,或列式数据库
相关文章