一、数据处理发展历程
90年代,网站访问量都不大。单个mysql完全可以应付。app——–dao——–mysql这种架构的瓶颈:1、数据量总量一个机器放不下时。2、数据索引一个机器放不下时。3、访问量(读和写)一个实例处理不了时。
访问量提高,开始加缓存。最开始是文件缓存来缓解数据库的压力,但是当数据访问量大的时候,多台web服务器不能共享文件缓存。大量的小文件缓存也带来了很高的IO压力。这个时候,memcached缓存出现。memcached是一个独立的分布式缓存服务器。
由于memcached只能缓解数据的读取压力,当写入压力增加之后,读写操作集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制的技术达到读写分离。以提高读写性能和读库的可扩展性。mysql的master-slave模式开始成为标配。
在memcached的高速缓存,mysql的主从复制,读写分离的基础上,这时mysql主表的写入压力开始出现瓶颈的时候,由于myisam使用表锁,在高并发的情况下会出现严重的锁问题,大量的高并发mysql应用开始使用innodb引擎。同时,开始使用分库分表的技术来缓解写压力和数据增长的扩展问题。这个时候,分库分表开始出现。
二、为什么用nosql?
传统关系型数据在应付超大规模和高并发的场景下显得力不从心。nosql,不仅仅是sql。泛指非关系型数据库。nosql的产生就是为了应付解决超大规模数据集合多种数据类型带来的挑战。
nosql数据库的种类繁多,但是一个共同的特点都是去掉关系数据库的关系特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构层面上带来了可扩展的能力。
多样灵活的数据模型。NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。
这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。
RDBMS vs NoSQL
RDBMS
– 高度组织化结构化数据
– 结构化查询语言(SQL)
– 数据和关系都存储在单独的表中。
– 数据操纵语言,数据定义语言
– 严格的一致性
– 基础事务
NoSQL
– 代表着不仅仅是SQL
– 没有声明性查询语言
– 没有预定义的模式
-键 – 值对存储,列存储,文档存储,图形数据库
– 最终一致性,而非ACID属性
– 非结构化和不可预知的数据
– CAP定理
– 高性能,高可用性和可伸缩性