(一)NoSQL概念(Not Only SQL )
泛指非关系型的数据库
这些类型的数据存储不需要固定的模式, 无需多余的操作可以横向扩展
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
(二)NoSQL数据库特点
1.易扩展:
nosql数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性
数据之间无关系 , 这样非常容易扩展 无形之间,在架构的层面上到来了可扩展的能力
2.大数据量高性能:
nosql数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀,得于它的无关系性,数据库的结构简单.
一般MySql使用Query Cache 每次表的更新Cache(高速缓冲存储器)就失效, 是一种大力度的Cache(高速缓冲存储器)
在针对web2.0交互频繁的应用 , Cache性能不高 而nosql 的Cache是记录级的
就是一种细粒度的Cache(高速缓冲存储器) 所以nosql在这个层面上来说就要性能高很多了
3.多样灵活的数据模型:
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。
(三)谈谈对redis的理解:
KV:键值对存储
Cache:缓存
Persistence:持久化
(四)传统RDBMS vs NOSQL
(1)RDBMS(关系型数据库)
1、高度组织化结构化数据
2、结构化查询语言 SQL
3、数据和关系都存储在单独的表中
4、数据操纵语言,数据定义语言
5、严格的一致性
6、基础事物
(2)NoSQL(非关系型数据库)
1、代表着不仅仅是SQL
2、没有声明性查询语言
3、没有预定义的模式
4、键值对存储,列存储,文档存储,图形数据库
5、最终一致性,而非ACID属性
6、CAP定理
7、高性能,高可用和可伸缩性
(五)NoSQL的3V+3高
(1)数据时代的3V:
1.海量Volume
2.多样Variety
3.实时Velocity
IDC的定义描述了大数据时代的三大特征,即俗称的“3V”。
第一个是Volume(海量),数据容量越来越大;
第二个是Velocity(速度),数据量增长越来越快,需要处理的速度和响应越来越快;
第三个是Variety(多样性),指各种各样类型的数据出现,过去的数据更多的是结构化的,现在越来越多的数据是半结构,甚至是完全没有结构的数据,如文本、邮件甚至于语音、视频等。
“3V”是对大数据最基本特征的归纳,得到业界的共识。
(2)互联网需求的3高:
高并发
高可扩
高性能
(六)NoSQL数据模型简介
聚合模型
1.kv键值对
2.Bson(JSON串)
3.列族(列族-->列键)
4.图形
(七)NoSQL数据库的四大分类
1.键值(Key-Value)存储数据库
2.文档型数据库(bson格式比较多)
3.图关系数据库
4.列存储数据库
(八) 分布式数据库中CAP原理CAP+BASE
(1)传统的ACID是什么(关系型数据库遵循ACID规则)
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
A (Atomicity) 原子性
C (Consistency) 一致性
I (Isolation) 独立性
D (Durability) 持久性
(2)NoSQL之CAP
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点
分区容忍性是我们必须需要实现的.也是就P(分区容错性)
(1).分布式架构的时候必须做出取舍。
(2).强一致性( C )和可用性( A)之间取一个平衡 ! 如下:
CA: 传统Oracle数据库
AP: 大多数网站架构的选择
CP: Redis、Mongodb
(3)BASE
BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。
BASE其实是下面三个术语的缩写:
1.基本可用(Basically Available)
2.软状态(Soft state)
3.最终一致(Eventually consistent)
它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。为什么这么说呢,缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想获得这些指标,我们必须采用另外一种方式来完成,这里BASE就是解决这个问题的办法
(九)分布式+集群简介
1.分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。
2.集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。