笔记大纲
-
NoSQL简介
-
NoSQL特点与应用场景
-
传统RDBMS比对NOSQL
-
常用缓存数据库
-
常见应用场景之解决Session共享问题
-
NoSQL数据模型
-
NoSQL数据库的四大分类
-
在分布式数据库中CAP原理CAP+BASE
-
传统的ACID
-
NoSQL的事务CAP【重点】
-
Base是什么?
-
分布式与集群简介
-
早期的互联网,网站访问量一般都不大,单个数据库完全可以应付,更多的都是静态网页,动态交互类型的网站不多。随着网站访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。所以程序员开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带了了比较高的IO压力。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
大数据时代3V:海量Volume、多样Variety、实时Velocity。
互联网3高:高并发、高可用、高性能。
1.NoSQL简介
NoSQL(Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
2.NoSQL特点与应用场景
NoSQL具有易扩展、大数据高性能,多样灵活的数据模型等特点。
序号 | NoSQL特点 | NoSQL适合场景 | NoSQL不适合场景 |
---|---|---|---|
1 | 不遵循SQL标准 | 高并发读写数据 | 需要事务支持 |
2 | 不支持ACID | 海量数据读写 | 基于SQL结构化查询存储,处理复杂关系 |
3 | 远超过SQL性能 | 对数据高可用 |
数据库结构简单,一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,
在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了!
3.传统RDBMS比对NOSQL
数据库 | RDBMS(关系型数据库) | NoSQL(非关系型数据库) |
---|---|---|
① | 高度组织化结构化数据 | 代表着不仅仅是SQL |
② | 结构化查询语言(SQL) | 无声明性查询语言 |
③ | 数据和关系都存储在单独的表中 | 无预定义的模式 |
④ | 数据操纵语言,数据定义语言 | 键 值对存储,列存储,文档存储,图形数据库 |
⑤ | 严格的一致性 | 最终一致性,而非ACID属性 |
⑥ | 基础事务 | 非结构化和不可预知的数据 |
⑦ | CAP定理 | |
⑧ | 高性能,高可用性和可伸缩性 |
4.常用缓存数据库
数据排行榜:http://db-engines.com/en/ranking
(1)Memcached
(2)Redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
(3)MongoDB
MongoDB是基于分布式文件存储的数据库,由c++编写。是一个介于关系数据库与非关系型数据间的产品,是非关系数据库当中功能最丰富,最像关系数据库!
(4)列式数据库
(5)HBase
(6)Cassandra
(7)Neo4j
…
5.常见应用场景之解决Session共享问题
(1)存于Cookie方式 ,即将Session数据以Cookie的形式存在客户端,但是不安全且网络负担效率低;
(2)存在文件服务器或数据库方式,这样会导致大量的IO操作,效率也低;
(3)Session复制方式,这样导致每个服务器之间必须将Session广播到集群内的每个节点,Session数据会冗余,节点越多浪费越大,存在广播风暴问题!
(4)存在Redis方式,目前来看,此种方案是最好的!将Session数据存在内存中,每台服务器都从内存中读取数据,速度快,结构还相对简单。
6.NoSQL数据模型
传统的关系型数据库在设计模型数据库时,一般采用ER图(1:1/1:N/M:N)进行数据模型的表示,而NoSQL采用的是BSON(是一类json的一种二进制形式的存储格式,简称是Binary JSON,支持内嵌的文档类型和数组对象)构建数据模型,BSON明显在处理多表关联关系时,性能就优化ER方式!
以上为什么可用聚合模型来处理?
高并发的操作是不建议有关联查询的,互联网公司用冗余数据来避免关联查询,因为分布式事务是支持不了太多的并发!
聚合模型:KV键值、BSON、列族、图形。
7.NoSQL数据库的四大分类
Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中!
8.在分布式数据库中CAP原理CAP+BASE
8.1.传统的ACID
关系型数据库遵循ACID规则,事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
(1)A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
(2)C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
(3)I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的
(4)D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
8.2.NoSQL的事务CAP【重点】
CAP原则又称CAP定理,指的是在一个分布式系统中,强一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾,只能在一致性与可用性间进行权衡!
因此,CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则、和满足AP原则三大类:
CA:单点集群,满足一致性,可用性的系统,通常在扩展性不太强大;(传统Oracle)
CP:满足一致性,分区容错性的系统!性能不是特别高。(redis、mongodb)
AP:满足可用性,分区容错性的系统!对一致性要求比较低。(大型网站架构的选择)
8.3.Base是什么?
BASE是为了解决关系数据库强一致性引起的问题而引发的可用性降低而提出的解决方案!
Basically Available:基本可用、Soft state:软引用、Eventually consistent:最终一致
核心思想:让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和心梗上改观。因为大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,恰好BASE解决这个问题。
8.4.分布式与集群简介
分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过RPC/RMI间通信和调用,对外提供服务和组内协作。
集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提高服务和访问。
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!