关系型数据库与NoSql数据库的比较

335 阅读3分钟

一、关系型数据库与NoSql数据库的比较

1、并发支持
关系型数据库:通过事务和锁来支持并发,高并发情况下,执行效率较低。
NoSql:打破了传统关系型数据库范式的约束和事务一致性,因此并发性能高。

2、存储与查询
关系型数据库:利用关系表方式存储数据,通过SQL查询
NoSql:分布式数据库,支持海量数据,多为键值方式存储数据,还有表格/列、文档、图像、对象和多值等存储方式;查询方式也多种多样,查询效率高。

3、扩展方式
关系型数据库:主要通过提升硬件配置等向上扩展方式来提升性能(垂直扩展)。
NoSql:增加数据库节点向外扩展(水平扩展)。

4、索引方式
关系型数据库:B树、哈希等
NoSql:键值索引

5、应用领域
关系型数据库:通用领域
NoSql:特定应用领域,如要求海量数据,高并发,高性能,伸缩性强,可容忍最终一致性的系统。

二、NoSql数据库的类型

按存储类型分有
1、键值对
代表是Redis

2、表格/列存储
关系型数据为按行存储。按列存储特别适合一个字段非常多的表,每次查询我们只从其中挑一些字段的情况。为啥呢,因为按行存储的话,尽管我们只获取小部分字段,但系统却不得不先将整行读出来,然后再挑出我们要的字段返回。返回内容的确不多,但背后消耗的性能却不少。因为数据是存放在页里面的,而页的尺寸大小固定,比如通常就是8K、16K等等,如果一行的字段很多,那么一页里包含的记录数就少,为了替我们找到指定的数据,返回的页就要很多,如果这些页没有在内存中,那么还要从磁盘里调度,呵呵,这时硬盘灯就在狂闪,怎么能不慢!

按列存储的话,这种情况就舒服多了。

什么表要用列存储呢?比如说,这个表用来存储一些什么环保水质、水文气象的指标,我去,那些个指标,多到你怀疑人生。

国内南大通用的GBase就是列存储的NOSQL数据库,天津的好像。

3、文档
一条记录就是一个文档。那么这个说是键值对存储方式也无不可。
代表是芒果DB(MongoDb)。它最像关系型数据库了。用javascript 来查询,酷吧。

4、图
代表Neo4j。
常用于知识图谱,人工智能范畴吧。

5、对象和多值存储
未知

三、NoSql的缺点

1、成熟度不够,大量关键特性有待实现
2、开源数据库产品的支持力度有限
3、数据挖掘与BI支持不足,现有许多系统无法直接使用NoSql
4、NoSql属新兴事物,专家和人才较少