1.为什么会有Nosql?
任何技术的出现都是一步一步演进出来的。
1.在互联网诞生初期,一个网站一个应用访问量都不大, 使用单机Mysql数据库可以应对。
随着用户的不断增多,单机MySQL可能无法放下,服务器也可能承受不住。
一个网站,大多数的情况都是查询,为了减少数据库的压力,可以引入缓存来保证效率。
加上读写分离策略:让主数据库处理事务性增、改、删操作,而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库,更新少查询多的情况下,可以减少数据库压力。
2.数据库缓存+读写分离,垂直拆分策略:
Mysql读的问题得到了缓解,写的压力依然存在,开始通过分库分表和MySQL集群来解决写的问题。
3.分库分表+mysql集群。
然而,Mysql数据库在面对数据量很多、变化很大数据,如大文本字段、图片等,MySQL效率就低了,并且扩展性差,大数据量场景下IO压力大,结构更改困难。如果有一种数据库专门来存储此类数据,MySQL压力就会变得很小。NoSQL数据库就应运而生,可以很好的解决上述问题。
2.什么是NoSQL?
NoSQL 一般被理解为 Not only SQL;
泛指非关系型数据库,数据的存储不需要是一个固定的格式。
特点:
-
方便扩展(数据之间没有关系)
-
大数据量高性能(官方说明,Redis一秒可以写8万次,读取11万次)
-
键 - 值对存储,存储数据类型多样,不需要设计数据库,随去随用。
传统的关系型数据库:
-
需要结构化组织
-
查询SQL
-
数据和关系存储在单独的表中
-
需要数据操作语言、数据定义语言语言
-
严格的一致性,ACID
-
事务
ACID:
-
A (Atomicity) 原子性
-
C (Consistency) 一致性
-
I (Isolation) 独立性
-
D (Durability) 持久性
非关系型数据库:
-
没有固定的查询语言
-
键值对存储(redis、memcache)、列存储(HBase)、文档存储(MongoDB)、图关系数据库(neo4j)
-
最终一致性
-
CAP定理和BASE
-
高性能,高可用,高可扩
CAP定理:
-
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
-
Availability(可用性), 好的响应性能
-
Partition tolerance(分区容错性) 可靠性 P: 系统中任意信息的丢失或失败不会影响系统的继续运作。
BASE理论
- 基本可用(Basically Available)
- 软状态(Soft State)
- 最终一致性(Eventually Consistent)