nosql 也就是非关系型数据库,并不是单一款数据库,而是一大类不使用传统关系型表结构和 sql 为主查询方式的数据库集合,主流产品按照存储模型可以分成四大类,分别是键值型 文档型 列族型 图数据库,除此之外还有时序数据库 对象数据库等细分类型。很多初学者会误以为 nosql 就是完全不用 sql,这个是常见误区,现在很多新型 nosql 产品也兼容类 sql 查询语法,核心特点是放弃强关系约束,支持灵活 schema,适合高并发 大数据 非结构化数据场景,和传统 mysql 这类关系型数据库形成互补,并不是完全替代关系型数据库。学习的时候要掌握每一类 nosql 数据库的代表产品,以及对应的适用业务场景,这样面试和项目选型的时候可以快速判断该选用哪一款 nosql 数据库。
四大主流分类清单
清单
第一类 键值型 nosql 数据库,原理是通过 key 主键快速读写 value,性能极高,适合缓存 会话存储 排行榜场景
第二类 文档型 nosql 数据库,存储类似 json bson 文档,字段可以动态变化,适合内容管理 用户画像 业务多变的系统
第三类 列族型 nosql 数据库,按列簇存储,适合海量数据批量写入,大数据分析场景
第四类 图数据库,专门存储节点和边的关系,适合社交关系 推荐系统 链路查询
主流产品对照表
| 分类 | 代表 nosql 数据库 | 核心特点 | 典型适用场景 |
|---|---|---|---|
| 键值型 | Redis | 内存级读写,支持持久化,数据结构丰富 | 缓存 分布式锁 消息队列 排行榜 |
| 键值型 | Memcached | 纯内存,轻量,不支持复杂数据结构 | 简单缓存 |
| 文档型 | MongoDB | bson 文档存储,支持索引,查询能力强 | 电商商品 用户数据 内容系统 |
| 文档型 | CouchDB | 支持多主同步,离线可用 | 跨端同步应用 |
| 列族型 | HBase | 基于 hadoop 生态,海量分布式存储 | 海量日志 大数据离线分析 |
| 列族型 | Cassandra | 多节点无中心,高可用,写性能强 | 高写入量业务 分布式日志 |
| 图数据库 | Neo4j | 原生图存储,关系查询性能优秀 | 社交网络 知识图谱 风控链路 |
| 图数据库 | JanusGraph | 分布式图数据库,可对接 hbase 等底层存储 | 超大规模关系数据 |
其他细分 nosql 数据库补充
清单
时序数据库 InfluxDB,专门存储带时间戳的数据,监控指标 物联网数据,属于 nosql 细分品类
对象数据库 MongoDB 之外还有 Couchbase,融合文档和键值特性
宽列数据库 ScyllaDB,基于 cassandra 协议,性能更高
选型判断步骤
第一步 先确认业务核心需求,如果主要做高速缓存优先选择键值型 nosql 数据库,首选 Redis。
第二步 如果业务字段经常变动,数据是 json 结构,优先选择文档型 nosql 数据库,首选 MongoDB。
第三步 如果是超大数据量,持续大量写入日志,优先列族型 nosql 数据库,HBase 或者 Cassandra。
第四步 如果核心查询是节点之间的关联关系,比如好友关系 依赖链路,优先图型 nosql 数据库 Neo4j。
第五步 如果是监控物联网时间序列数据,选择时序类 nosql 数据库 InfluxDB。
总结,nosql 数据库产品非常多,核心是按存储模型划分,最常考最常用的就是 Redis MongoDB HBase Cassandra Neo4j 这几款,不同 nosql 数据库没有绝对好坏,是根据业务场景选型,同时要记住 nosql 一般不支持完整的外键强事务,对强一致事务要求极高的业务仍然需要搭配传统关系型数据库。
【常见问题】
问题 1 nosql 数据库是不是完全不能使用 sql 查询
回答 1 不是,传统认知里 nosql 不依赖标准 sql,但是现在很多 nosql 数据库支持类 sql 查询语法,nosql 核心是不采用关系型二维表模型,不是绝对禁止 sql 语句。
问题 2 Redis 属于哪一类 nosql 数据库
回答 2 Redis 属于键值型 nosql 数据库,它依靠 key 和 value 进行存取,读写速度非常快,是项目里面最常用的 nosql 缓存数据库。
问题 3 MongoDB 为什么归类为 nosql 数据库
回答 3 MongoDB 是文档型 nosql 数据库,它存储 bson 格式文档,没有固定表结构,不需要预先定义字段,不使用传统关系型数据库的表关联模型,所以归类为 nosql 数据库。
问题 4 nosql 数据库可以替代 mysql 吗
回答 4 不可以完全替代,nosql 数据库适合高并发灵活数据场景,但是强事务 复杂多表关联查询场景仍然适合 mysql,很多项目是 mysql 搭配 nosql 数据库混合使用。
【免责申明】
本内容为技术学习参考,nosql 数据库版本持续迭代,产品特性会随版本更新发生变化,生产环境选型请结合官方文档和业务实际评估,本内容不替代专业架构师方案设计。


