网站的瓶颈:
- 数据量太大,一个机器放不下
- 数据的索引(B + Tree),一个机器内存也放不下
- 访问量(读写混合),一个服务器承受不了
网站80%的情况都是读的情况,为了减轻数据的压力,可以使用缓存来保证效率。
发展过程:
- 优化数据结构和索引
- 文件缓存(IO)
- Memcached
本质:数据库(读,写)
数据库引擎历史:
早些年使用MyISAM:表锁,十分影响效率,高并发下就会出现严重的锁问题
转战Innodb:行锁
慢慢的开始使用分库分表来解决写的压力,MySQL的集群,很好的解决。
用户的个人信息,社交网络,地理位置。用户自己产生的数据,用户日志等信息爆发式增长,使用
NOSQL
可以很好的解决这个问题
NOSQL
: Not Only SQL (不仅仅是SQL)
- 泛指非关系型数据库,随着Web2.0诞生。传统的关系型数据库很难对付Web2.0时代。尤其是超大规模的高并发问题。
- 很多的数据类型,如用户的个人信息,社交网络,地址位置等。这些数据类型的存储不需要一个固定的格式。不需要多余的操作就可以横向扩展。
- 方便扩展(数据之间没有关系,很好扩展)
- 大数据量性能(Redis一秒写8万次,读11万次。NOSQL的缓存记录级,是一种细粒度的缓存,性能会比较高)
- 数据类型是多样型的(不需要事先设计数据库,随取随用)
- 传统RDBMS和NOSQL对比
RDBMS - 结构化组织 - SQL查询语言 - 数据和关系都存在单独的表中 - 数据操作语言,数据定义语言 - 严格的一致性 - 基础的事物
NOSQL - 不仅仅是数据 - 没有固定的查询语言 - 键值对存储,列存储,文档存储,图形数据库 - 最终一致性 - CAP定理和BASE(异地多活) - 高性能,高可用,高可扩展性
大数据的3V:描述问题
- 海量Volume
- 多样Variety
- 实时Velocity
大数据的3高,对程序的要求
- 高并发
- 高可扩展性
- 高性能
KV键值对
- Redis
文档型数据
MongoDB
- 是一个分布式文件存储的数据库,C++编写,主要用于处理大量文档。是一个介于关系型数据库和非关系型数据中的中间产品,是非关系型数据库中功能最丰富,最像关系型数据库的。
ConthDB
列存储数据库
- HBase
- 分布式文件系统
图形关系数据库(不是存图形的,放的是关系)
- Neo4J
- InfoGrid