内容纲要
NoSQL
即非关系型的数据库。
NoSQL = Not Only SQL != No SQL
关系型数据库的缺点
- 行存储,无法存储数据结构
- schema 扩展不方便
- 在大数据场景下 I/O 支撑难度高
- 全文搜索功能弱
常见 NoSQL 方案分类
- KV(key-value) 存储:解决关系型数据库无法存储数据结构的缺点(Redis 等)
- 支持简单事务
- 只能保证隔离性和一致性;不能保证原子性和持久性
- 支持简单事务
- 文档数据库:解决关系型数据库 schema 问题(MongoDB 等)
- no-schema:可以存储和读取任意数据
- 新增字段简单
- 历史数据不会出错
- 存储复杂数据简单
- 不支持事务
- 无法实现 join 操作
- no-schema:可以存储和读取任意数据
- 列式数据库:解决关系型数据库大数据高 I/O 场景问题(HBase 等)(类数据库适合在某些特定场景中使用,如:离线大数据分析等,场景不匹配优势变劣势)
- 业务同时读取多个列效率高
- 能够同时对一行中的多个列进行操作
- 节省 I/O
- 列数据压缩比例更高
- 全文搜索引擎:解决关系型数据库全文搜索弱的问题(Elasticsearch 等)
- 原理:倒排索引;建立单词到文档的索引
如何选型
关系型和 NoSQL 选型主要看数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维性等。
- 管理型系统:如运营类系统
- 首选关系型
- 大流量系统:如电商单品页某服务
- 后台首选关系型;前台选内存型
- 日志型系统
- 原始数据选列式存储
- 搜索日志选搜索引擎型
- 搜索型系统:如站内搜索
- 后台选关系型
- 前台选搜索引擎型
- 事务型系统:库存、交易、记账
- 关系型 + 缓存 + 一致性
- 离线计算
- 首选列式
- 实时计算
- 时间序列数据库
- 列式数据库
NoSQL 有优势也有劣势,不能盲目相信“NoSQL 银弹”论,应该将 NoSQL 作为 SQL 的补充。