Loading

关系型和非关系型数据库对比

date: 2018-12-11 15:40:29
updated: 2018-12-11 15:40:29

关系型数据库 Structured Query Language

1.优点
  1. 事务处理时保持数据的一致性

    如果读取的过程中其他事务对数据有写入操作,查询出来的结果也依旧是读取开始前的状态,不会呈现修改后的结果。

  2. 以标准化为前提,数据更新的开销很小(相同字段基本上只有一处)

  3. 可以使用join等复杂查询

2.缺点
  1. 扩展困难

    由于存在类似join这样多表查询机制,使得数据库在扩展方面很难。

  2. 读写慢

    这种情况主要发生在数据量达到一定规模时由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等并发问题,所以导致其读写速度下滑非常严重

  3. 成本高

    企业级数据库的许可证价格高,并随着规模的增加而不断增加

  4. 有限的支撑容量

    现有的关系型解决方案还无法支撑海量数据

非关系型数据库 Not Only Structured Query Language

1.优点
  1. 扩展方便

    典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群

  2. 快读读写

    主要例子有Redis,由于其逻辑简单,而且纯内存操作,使得其性能非常出色,单节点每秒可以处理超过10万次读写操作

  3. 低廉成本

    这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本

2.缺点
  1. 不提供对SQL的支持,需要学习对应的语言

  2. 支持的特性不够丰富

    现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像MS SQL Server和Oracle那样能提供各种附加功能,比如BI和报表等

  3. 现有产品的不够成熟

3.适用场景
  1. 数据库表schema经常变化

    比如在线商城,维护产品的属性经常要增加字段,这就意味着ORMapping层的代码和配置要改,如果该表的数据量过百万,新增字段会带来额外开销(重建索引等)。NoSQL应用在这种场景,可以极大提升DB的可伸缩性,开发人员可以将更多的精力放在业务层。

  2. 数据库表字段是复杂数据类型

    对于复杂数据类型,比如SQL Sever提供了可扩展性的支持,像xml类型的字段。很多用过的同学应该知道,该字段不管是查询还是更改,效率非常一般。主要原因是是DB层对xml字段很难建高效索引,应用层又要做从字符流到dom的解析转换。NoSQL以json方式存储,提供了原生态的支持,在效率方便远远高于传统关系型数据库。

  3. 高并发数据库请求

    此类应用常见于web2.0的网站,很多应用对于数据一致性要求很低,而关系型数据库的事务以及大表join反而成了”性能杀手”。在高并发情况下,sql与no-sql的性能对比由于环境和角度不同一直是存在争议的,并不是说在任何场景,no-sql总是会比sql快。有篇article和大家分享下,http://artur.ejsmont.org/blog/content/insert-performance-comparison-of-nosql-vs-sql-servers

  4. 海量数据的分布式存储

    海量数据的存储如果选用大型商用数据,如Oracle,那么整个解决方案的成本是非常高的,要花很多钱在软硬件上。NoSQL分布式存储,可以部署在廉价的硬件上,是一个性价比非常高的解决方案。

posted @ 2020-10-21 16:38  猫熊小才天  阅读(71)  评论(0编辑  收藏  举报