1.SQL的发展历程
1)单机MySQL的美好时代
一个网站的访问量一般都不大,而且更多的是静态页面,动态交互类型的网站不多,用单个数据库完全可以轻松应对
2)缓存+垂直拆分
随着访问量的上升,部分使用MySQL架构的网站在数据库上都开始出现性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力。但是访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带来了比较高的IO压力。Memcached就成为了一个非常时尚的技术产品。
同时,对表按业务进行拆分-垂直拆分
3)主从读写分离
由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配。
4)水平拆分-mysql集群
在Memcached的高速缓存,MySQL的主从复制,读写分离的基础之上,这是MySQL的主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB,引擎代替MyISQM。同时开始流行使用分表分库来缓解写压力和数据增长的扩展问题。
垂直拆分,读写分离,水平拆分:https://www.cnblogs.com/jthr/p/14470951.html
1.SQL和NOSQL
关系型数据库:
1.以表的形式存储数据
2.数据之前的关系存储在表中
3.表的格式固定,数据的格式已经被定下来了
4.扩展性不强(比如业务发生变化,通常需要加表或者在原表的基础上新增修改字段)
5.有申明式查询语言
6.有严格的事物
NOSQL:
1.数据格式不固定
2.扩展性强(可以存储任意想要的格式)
3.没有申明式查询语言
4.大数据量下高性能
5.最终一致性,而非ACID属性
6.CAP定理
acid和cap:https://www.cnblogs.com/jthr/p/14475318.html
在现今大数据的时代下,对数据的量、多样性、实时性要求都十分的高。所以对互联网的要求,高并发、易扩展、高可用。Nosql能够提供促进作用。
2.NOSQL的聚合模型
nosql的目标是聚合数据,去关系
Nosql数据模型:
1.key value键值
2.BSON
BSON()是一种类json的一种二进制形式的存储格式,简称为Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象
3.列族
按列存储的(把一列的数据作为一个单位存储)。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势
4.图形
比如说复杂的用户之间的关系的存储使用图形。
3.Nosql数据库的四大分类
类型 | 部分代表 | 特点 |
列存储 |
Hbase Cassandra Hypertable |
顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 |
MongoDB CouchDB |
文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。 |
key-value存储 |
Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis |
可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
图存储 |
Neo4J FlockDB |
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
5.四类数据库的对比