☰
从0开始学架构-16:高性能NoSQL
2026/10/15 3:56:32 网站建设 项目流程

关系数据库经过几十年的发展后已经非常成熟,强大的SQL功能和ACID的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。

·  关系数据库存储的是行记录,无法存储数据结构

以微博的关注关系为例,“我关注的人”是一个用户ID列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。

·  关系数据库的schema扩展很不方便

关系数据库的表结构schema是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行DDL(data definition language,如CREATE、ALTER、DROP等)语句修改,而且修改时可能会长时间锁表(例如,MySQL可能将表锁住1个小时)。

·  关系数据库在大数据场景下I/O较高

如果对一些大量数据的表进行统计之类的运算,关系数据库的I/O会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。

·  关系数据库的全文搜索功能比较弱

关系数据库的全文搜索只能使用like进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。

针对上述问题,分别诞生了不同的NoSQL解决方案,这些方案与关系数据库相比,在某些应用场景下表现更好。但世上没有免费的午餐,NoSQL方案带来的优势,本质上是牺牲ACID中的某个或者某几个特性,因此我们不能盲目地迷信NoSQL是银弹,而应该将NoSQL作为SQL的一个有力补充,NoSQL != No SQL,而是NoSQL = Not Only SQL。

常见的NoSQL方案分为4类。

·  K-V存储:解决关系数据库无法存储数据结构的问题,以Redis为代表。

·  文档数据库:解决关系数据库强schema约束的问题,以MongoDB为代表。

·  列式数据库:解决关系数据库大数据场景下的I/O问题,以HBase为代表。

·  全文搜索引擎:解决关系数据库的全文搜索性能问题,以Elasticsearch为代表。

今天,我来介绍一下各种高性能NoSQL方案的典型特征和应用场景。

K-V存储

K

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询