1、关系型数据库的特点
- 获取持久化数据:可以将数据持久化到磁盘,并且很容易访问到其中一小块数据。
- 并发:关系型数据库中有“事务”的概念,有效保障了多个程序访问同一份数据时的一致性,事务的ACID(原子性、一致性、隔离性、持久性)特性相信大家都了熟于心了。
- 集成:不同开发团队,不同平台,不同语言的应用程序可以共享同一份数据。
- 标准的关系模型:之所以能够很方便地达到上述目的,是因为提供了近乎标准的、统一的关系模型。
2、传统关系数据库的瓶颈
- 性能受限:随着网络规模急剧增加,硬件计算资源“横向拓展”已经成为必然,集群已经成为趋势,然而关系型数据库并不是设计给集群用的,要么采用“共享磁盘子系统”来支撑集群上的文件系统(磁盘会成为瓶颈),要么按照逻辑对数据库进行分片,这样虽然能够将负载分散到多个服务器,但是应用程序必须控制所有分片,而且事务、一致性等无法跨越分片进行。
- 扩展性差:大数据量高并发环境下的 MySQL 应用开发越来越复杂,也越来越具有技术挑战性,分表分库的规则把握都是需要经验的。
3、NoSQL的优点
- 易扩展:NoSQL 数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。
- 大数据量,高性能:NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般 MySQL 使用 Query Cache,每次表的更新 Cache 就失效,是一种大粒度的 Cache,在针对 web2.0 的交互频繁的应用,Cache 性能不高。而 NoSQL 的 Cache 是记录级的,是一种细粒度的 Cache,所以 NoSQL 在这个层面上来说就要性能高很多了。
- 灵活的数据模型:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的 web2.0 时代尤其明显。
- 高可用:NoSQL 在不太影响性能的情况,就可以方便的实现高可用的架构。比如 Cassandra,HBase 模型,通过复制模型也能实现高可用。