关系型数据库已经成为计算机文化的一部分,因其很多优点:
获取持久化数据
可以将数据持久化到磁盘,并且很容易访问到其中一小块数据。
并发
关系型数据库中有“事务”的概念,有效保障了多个程序访问同一份数据时的一致性,事务的ACID(原子性、一致性、隔离性、持久性)特性相信大家都了熟于心了。
集成
不同开发团队,不同平台,不同语言的应用程序可以共享同一份数据
标准的关系模型
之所以能够很方便地达到上述目的,是因为提供了近乎标准的、统一的关系模型
但是两个原因使得关系型数据库显得力不从心:
阻抗失谐
内存中的数据结构和关系模型相差甚远,这就是所谓的“阻抗失谐(impedance mismatch)”。像“嵌套记录”、“列表”等内存结构需要先转换为“关系”和“元组”才能进行存储。
蜂拥而来的集群
随着网络规模急剧增加,硬件计算资源“横向拓展”已经成为必然,集群已经成为趋势,然而关系型数据库并不是设计给集群用的,要么采用“共享磁盘子系统”来支撑集群上的文件系统(磁盘会成为瓶颈),要么按照逻辑对数据库进行分片,这样虽然能够将负载分散到多个服务器,但是应用程序必须控制所有分片,而且事务、一致性等无法跨越分片进行。
至此,NoSQL诞生。
- 为集群而生
基本上可以认为NoSQL是为集群而生的(少数的如图数据库不是这样),当待处理的数据量很大,或者以较快速度增长,同时对数据访问效率要求很高,考虑NoSQL。
- 阻抗失谐
记住在集群上处理“大数据”并不是NoSQL***的原因,阻抗失谐也是另一大关键因素,NoSQL数据库中没有传统关系型数据库中的“模式”的概念,无需事先定义好数据存储模型,可以随意添加字段,非常适合于处理不规则数据和自定义字段,当希望以更加方便友好的数据交互方式来提高应用程序开发效率时,考虑NoSQL。