声明:学习完李运华《从 0 开始学架构》,有一种醍醐灌顶,豁然开朗的感觉。为了能够对其概念有一个深入的理解,并且掌握其总结的方法论。特意对本课程做一个提炼,形成自己的知识体系。毕竟能给别人讲清楚了,才能说明自己真的掌握了。本文的引用仅限自我学习如有侵权,请联系作者删除。
什么是NoSQL?
NoSQL 作为 SQL 的一个有力补充,NoSQL != No SQL,而是 NoSQL = Not Only SQL。
常见的 NoSQL 方案分为 4 类:
(1)K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。
(2)文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。
(3)列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。
(4)全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。
关系型数据库有什么优缺点?
优点:易于维护。具有强大的SQL功能,同时支持ACID 属性
缺点:
(1)关系数据库存储的是行记录,无法存储数据结构。
(2)关系数据库的 schema(数据库对象集合) 扩展很不方便。
(3)关系数据库在大数据场景下 I/O 较高。
(4)关系数据库的全文搜索功能比较弱。
NoSQL数据库分别有什么优缺点?
1、K-V 存储:
优点:Redis 的 Value 是具体的数据结构,包括 string、hash、list、set、sorted set、bitmap 和 hyperloglog,所以常常被称为数据结构服务器。
缺点:Redis 的缺点主要体现在并不支持完整的 ACID 事务,Redis 虽然提供事务功能,但 Redis 的事务和关系数据库的事务不可同日而语,Redis 的事务只能保证隔离性和一致性(I 和 C),无法保证原子性和持久性(A 和 D)
2、文档数据库:
优点:
(1) 新增字段简单
(2)历史数据不会出错
(3)可以很容易存储复杂数据
缺点:文档数据库的缺点就是无法实现关系数据库的 join 操作。
3、列式数据库:
与关系型数据相比,它是列式存储的,它的优势和劣势是分业务场景的。典型的场景是需要频繁地更新多个列时它是劣势,更新多个行时,它是优势。
4、全文搜索引擎:
全文搜索引擎的技术原理被称为“倒排索引”,示例如下:
优点:关键词搜索查询快
缺点:业务场景比较窄
关系型和NoSQL数据库如何选型?
考虑几个指标,数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维性等。根据这些指标,软件系统可分成几类:
1.管理型系统,如运营类系统,首选关系型。
2.大流量系统,如电商单品页的某个服务,后台选关系型,前台选内存型。
3.日志型系统,原始数据选列式,日志搜索选倒排索引。
4.搜索型系统,指站内搜索,非通用搜索,如商品搜索,后台选关系型,前台选倒排索引。
5.事务型系统,如库存、交易、记账,选关系型+缓存+一致性协议,或新型关系数据库。
6.离线计算,如大量数据分析,首选列式,关系型也可以。
7.实时计算,如实时监控,可以选时序数据库,或列式数据库。