为什么要用Nosql
一般的关系型数据库无法满足需求.
单机mysql的年代!
90年代,一个基本的网站访问量很小,单个数据库就可以满足正常的使用需求! 使用最多的互联网产品就是静态网站,服务器压力小.
整个网站的瓶颈是什么?
- 1.1数据量如果太大,一个机器放不下!
- 1.2数据的索引(B+ Tree),一个机器内存也装不下!
- 1,3访问量(读写混合),一个服务器无法承担. 以上三种情况,都需要涉及缓存.
Memcached(缓存)+MySQL+读写分离
发展过程:优化数据结构和索引-->文件缓存(IO)-->Memcached(当时最热门的技术!)
网站大多数时候都是在读,每次都执行查询数据库的话耗时长效率低,减轻数据读写压力,通过读写缓存.
分库分表+MySQL集群
本质: 数据库的读和写
早些年MyISAM:表锁,十分影响效率!高并发小就会出现严重的锁问题
Innodb:行锁 后来使用分库分表来解决写的压力.
** 为什么要用NoSQL**
MySql等关系型数据库不够用!数据种类多,量大! 用户的个人信息.社交网络,地理位置,用户自己生产的数据,用户日志等等爆发式增长!
什么是NoSQL
NoSql = Not only SQL(不仅仅是sql); 泛指非关系型数据库,随着web2.0互联网的诞生!传统的关系型数据库难以应付!尤其是超大规模的高并发社区暴露出来很多难以克服的问题,NoSql在当今大数据环境下发展十分迅速,redis发展是快速的,而且是我们当下必须掌握的一个技术!
很多的数据类型如用户的个人信息,社交网络,地理位置,这些数据类型的存储不需要一个固定的格式!不需要多样的操作就可以横向拓展! Map<String,Object>使用键值对的形式来控制!
NoSql的特点
解耦!
-
方便拓展(数据之间没有关系,很好拓展)
-
大数据量高性能(redis一秒8万次,读取11万,NoSql的缓存记录级,是一种细粒级的缓存,性能会比较高!)
-
数据类型是多样性的!(不需要事先设计数据库,随取随用!如果是数据量十分大的表,设计会变得很复杂)
-
传统的关系型数据库:
- 结构化组织;
- sql;
- 数据和关系都存在于单独的表中;
- 数据定义语言;
- 严格的一致性.
- 基础的事务
-
NoSql
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库
- 最终一致性
- cap定理和BASE(异地多活)
- 高性能,高可用,高可扩
拓展
大数据时代的3V:
1.Volume(海量)
2.Variety(多样)
3.Velocity(实时)
大数据时代的3高:
1.高并发
2.高可扩
3.高性能
真正的企业项目实战中:关系型+非关系型结合.