分布式数据库 / 大数据 / 学习 · 2021年3月1日

分布式数据库学习笔记(1)

第一章:绪论

一、课程目的

1.课程定位

  • 大数据背景下数据的存储管理与处理。

2.知识目标

  • 掌握NosQL数据库系统的概念、结构、功能;
  • 掌握NosQL数据库系统设计的原理、方法和技术

3.能力目标

  • 培养良好的NoSQL数据库程序设计风格和严密的逻辑思维能力
  • 提高NosQL数据库程序设计与实现能力。

二、课程安排

学习内容

  • 掌握NoSQL数据库基本理论、结构特点、设计原则
  • 掌握Hbase,MongoDB的原理、基本操作及应用
  • 其他NoSQL数据库类型、特点及应用场景
  • 综合实验,结合Python和NoSQL进行开发

教学方式

  • 32课时理论+32课时实验

成绩考核

  • 课程实验      40%
  • 考试             60%

三、课程安排

quicker_54dab783-97d9-4a14-b170-d7d625129f06.png
目录
01NosQLB诞生
02分布式数据管理
03 ACID/BASE
04 NoSQL分类

一、数据库基本知识

1、什么是数据库?

数据库(Database)是按照一定的数据模型来组织、存储和管理数据的仓库。

2、什么是数据模型?

把现实世界中的人、物、活动、概念等用【数据模型】来抽象、表示成计算机能识别和处理的数字。教据模型是DB系统的核心和基础。

3、数据库技术发展至今,传统数据库根据不同的数据模型,主要分为以下三种:层次型、网状型和关系型。

quicker_fcd241dc-51c1-4ad8-969f-45e592312f93.png

关系数据模型

关系模型有严格的数学基础,抽象级别比较高,而且简单清晰,便于理解。很快工业界就参与进来研发关系数据库系统以及SQL.
代表产品有Oracle,IBM公司的DB2、微软公司的SQLServer以及开源的Mysql.

学生借阅图书的管理系统

  1. 有哪些学生
  2. 有哪些图书
  3. 记录学生借书还书行为
  4. 分析学生借阅喜好

学生借书

quicker_ba67a4a8-cd12-4e3d-a51a-86c4671be399.png

quicker_b8f30e4f-a352-4cdc-a301-b78d7f10dce1.png

学生选课

quicker_ce188363-7274-4353-aa54-c4bb2d917b48.png

quicker_877ebfe7-9db4-454b-a2bb-488c7d3b9a4d.png

关系模型要点回顾

1.数据结构:
现实世界的实体以及实体之间的各种联系均用关系来表示
数据逻辑结构:二维表
2.完整性约束条件
域完整性,实体完整性,参照完整性、用户完整性
3.关系操作
选择,投影,连接等等关系运算;操作对象和结果都是集合

1.5关系型数据库的优点

关系型数据库的特点

  1. 容易理解:用二维表表示
  2. 使用方便:通用的SQL语言。
  3. 易于维护:丰富的完整性约束大大减低了数据冗余和数据不一致的可能性。

quicker_09a424cc-60b9-490d-a27f-574641e9a50d.png

quicker_8a038414-bff1-43f5-900b-1a0b3ba1d95f.png

quicker_525cde24-bf99-4b6d-8401-a0c8f2a6e326.png

关系型数据库的不足

无法适应多变的数据结构

现代网络中存在大量的半结构化、非结构化数据,针对结构化数据而设计的关系型数据库系统来说,对这些不断变化的数据结构,很难进行高效的处理。

高并发读写的瓶颈

当数据量达到一定规模时由于关系型数据库的系统逻辑非常复杂,使得在并发处理时非常容易发生死锁,导致其读写速度下滑严重。

可扩展性的限制

在现代互联网环境下,应用系统可能在短时间内出现业务量和业务类型的快速变化,而这些变化要求支撑数据库在底层硬件和数据库设计中提供极强的扩展性。由于关系型数据库存在类似的join操作,使得数据库在扩展方面很困难。

如何解决关系型数据库在大数据时代的问题

在大数据的时代背景下,必须对传统的关系数据库做出改变,才能适应大数据时代的要求。

  • 放松数据一致性的要求
  • 改变固定的表结构
  • 去除事务、关联等复杂操作

为了改变关系型数据库的不足,适应当前大数据库时代海量的非结构化数据存储的需要,一种新型数据库类型-NoSQL (非关系型数据库)诞生了。

quicker_79402e43-9510-480f-a038-60cf9eb84b5a.png

分布式数据库必须具有如下特征,才能应对不断增长的海量数据。
高可扩展性:分布式数据库必须具有高可扩展性,能够动态地增添存储节点以实现存储容量的线性扩展
高并发性:分布式数据库必须及时响应大规模用户的读/写请求,能对海量数据进行随机读写
高可用性:分布式数据库必须提供容错机制,能够实现对数据的冗余备份,保证数据和服务的高度可靠性

三、Nosql:特点

  1. 模式自由
  2. 逆规范化
  3. 多分区存储
  4. 可扩展性强
  5. 多副本异步复制
  6. 软事务

分布式数据管理

一.分布式数据库的数据管理

1、什么是数据库系统?
数据库系统=数据库管理系统+ 数据库
2、什么是数据库管理系统?
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。主要任务就是对外提供数据,对内要管理数据。
3、数据处理方式:集中式VS分布式
集中式数据库是指数据库中的数据集中存储在一台计算机上,数据的处理也集中在一台机器上完成。
分布式数据库是指利用高速计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。
4、CAP理论
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
2000年由布鲁尔教授提出CAP理论的猜想
2002年由Gilbert和Lynch证明CAP理论

quicker_4786af20-943e-4de4-b6e7-539baa3c19e4.png


1) C:一致性(consistency) (强一致性)
它是指任何一个读操作总是能够读到之前完成的写操作的结果。所有节点在同一时间具有相同的数据。
举例:
先写v=10,再读,读写数据一致
强一致性:多副本一致

2)A:可用性(Availability )
每个请求都能在确定时间内返回一个响应,无论请求是成功或失败。
3) P:分区容忍性(Partition Tolerance)
它是指当出现网络分区情况时,即系统中的一部分节点无法和其他节点进行通信,分离的系统也能正常运行。也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。

N1节点更新了V0到V1,想在也想把这个消息通过M操作告诉N1节点,却发生了网络故障。这时候小明和小华都要同时访问这个数据,怎么办呢?现在我们依然想要我们的系统具有CAP三个特性,我们分析一下会发生什么。

(1)系统网络发生了故障,但是系统依然可以访问,因此具有容错性。
(2)小明在访问节点N1的时候更改了V0到V1,想要小华访问节点N2的V数据库的时候是V1,因此需要等网络故障恢复,将N2节点的数据库进行更新才可以。
(3)在网络故障恢复的这段时间内,想要系统满足可用性,是不可能的。因为可用性要求随时随地访问系统都是正确有效的。这就出现了矛盾。

正是这个矛盾所以CAP三个特性肯定不能同时满足。既然不能满足,那我们就进行取舍。

有两种选择:

(1)牺牲数据一致性,也就是小明看到的衣服数量是10,买了一件应该是9了。但是小华看到的依然是10。
(2)牺牲可用性,也就是小明看到的衣服数量是10,买了一件应该是9了。但是小华想要获取的最新的数据的话,那就一直等待阻塞,一直到网络故障恢复。

当处理CAP的问题时,可以有几个明显的选择:

  1. CA:也就是强调一致性(C)和可用性(A) ,放弃分区容忍性(P) ,最简单的做法是把所有与事务相关的内容都放到同一台机器上。
  2. CP:也就是强调一致性(C)和分区容忍性(P) ,放弃可用性(A) ,当出现网络分区的情况时,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务
  3. AP:也就是强调可用性(A)和分区容忍性(P) ,放弃一致性(C) ,允许系统返回不一致的数据

quicker_339c05c7-c07a-44ff-a63e-c0a874215216.png

事实证明,大多数都是牺牲了一致性。像12306还有淘宝网,就好比是你买火车票,本来你看到的是还有一张票,其实在这个时刻已经被买走了,你填好了信息准备买的时候发现系统提示你没票了。这就是牺牲了一致性。
但是不是说牺牲一致性一定是最好的。就好比mysql中的事务机制,张三给李四转了100块钱,这时候必须保证张三的账户上少了100,李四的账户多了100。因此需要数据的一致性,而且什么时候转钱都可以,也需要可用性。但是可以转钱失败是可以允许的。

P是网络性质, CA是分布式系统性质,分区容忍性不是设计分布式系统时可以选择的东西(因为无论如何,它都要发生,无法控制), CAP合理表述是:在一个允许网络发生故障的系统中,分布式系统该选择一致性C还是可用性A。

重新理解

2012年, Eric Brewer发表文章指出:实践过程中应用CAP理论时不得不进行“三选二”存在误导性。

  1. P发生的概率很小,不应该在设计之初直接放弃A或者C.
  2. 即使在AC之间进行取舍,也不应该粗暴地在系统层面取A舍C或取C舍A,应该针对不同粒度,子系统差异化。
  3. CAP三个特性可在一定程度上进行取舍。

三、ACID, BASE与一致性

1、 ACID是什么?

指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)一致性(Consistency) 、隔离性(Isolation)、持久性(Durability) 。

  1. 原子性: 一个事务的所有系列操作步骤被看成是一个动作,所有的步骤要么全部完成要么都不会完成。
  2. 一致性: 事务执行前后,数据库的状态都满足所有的完整性约束。不能发生表与表之间存在外键约束,但是有数据却违背这种约束性。
  3. 隔离性: 并发执行的事务是隔离的,保证多个事务互不影响,隔离能够确保并发执行的事务能够顺序一个接一个执行,通过隔离,一个未完成事务不会影响另外一个未完成事务。
  4. 持久性: 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,不会因为和其他操作冲突而取消这个事务。

2、 BASE原则又是什么?

BASE原则=基本可用性(Basically Available) +软状态(Soft state)最终一致性(Eventuallyconsistent)

  1. 基本可用性:分布式系统在出现故障的时候,允许损失部分可用性,即保证核心功能或者当前最重要功能可用,但是其他功能会被削弱。
  2. 软状态:允许系统数据存在中间状态,但不会影响到系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步时存在延时。
  3. 最终一致性:要求系统数据副本最终能够一致,而不需要实时保证数据副本一致。最终一致性是弱一致性的一种特殊情况。

而在实际工程实践中,最终一致性分为5种:因果一致性、读己之所写(因果一致性特例)、会话一致性、单调读一致性、单调写一致性。

quicker_485da352-2e8d-437f-a32f-1ade495d3819.png

3、为什么会出现BASE思想?

CAP理论定义了分布式存储的根本问题,但并没有指出一致性和可用性之间到底应该如何权衡。于是出现了BASE思想,给出了权衡A与C的一种可行方案。

ACID和BASE代表了在一致性-可用性两点之间进行选择的设计哲学

ACID强调一致性被关系数据库使用, BASE强调可用性被大多数Nosql

quicker_ec19840b-073b-4f7b-b638-040a180bd2a9.png