这是我参与「第五届青训营 」笔记创作活动的第10天
一、前情回顾
- 存储系统
- 块存储
- 文件存储
- 对象存储
- key-value 存储
- 数据库系统
- 关系型数据库
- 非关系型数据库
- 分布式架构
- 数据分布策略
- 数据复制协议
- 分布式事务算法
二、本堂课重点知识
- 经典案例
- 喜闻乐见:从一场红包雨说起
- 发展历史
- 源远流长:RDBMS从1970年第一篇论文发布至今已有50余年,衍生出Oracle,DB2,MySQL,SQL Server,Aurora等一系列知名数据库产品
- 关键技术
- 万变归宗:无论RDBMS如何演变,其核心都是SQL引擎、存储引擎、事务引擎
- 企业实践
- 繁花似锦:RDBMS广泛的应用于互联网、金融、电信、电力等领域,成为了各类企业级应用的数据基石
三、详细知识点介绍
1. 经典案例
1.1 从一场红包雨说起
每年的春节,抖音上都会下一场温暖人心的红包雨
- 从抖音的账户上扣除一个小目标
- UPDATE account_table SET balance = balance - '小目标' WHERE name = '抖音';
- 给羊老师的账户加上一个小目标
- UPDATE account_table SET balance = balance + '小目标' WHERE name = '羊老师';
1.2 RDBMS 事务 ACID
事务(Transaction):是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性。
BEGIN;
UPDATE account_table SET balance = balance - '小目标' WHERE name = '抖音';
UPDATE account_table SET balance = balance + '小目标' WHERE name = '杨洋';
COMMIT;
ACID:
- 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生
- 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性
- 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果
- 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
1.3 红包雨 与 ACID
- Case1:抖音的账户上扣了一个亿之后,假设服务器挂了,还没来得及给羊老师账户上加一个亿。
原子性 Atomicity
两个操作要么同时成功,要么同时失败,不存在中间状态。
- Case2:假设抖音的账户上只有0.5亿,但是扣减1个亿的操作成功了
一致性 Consistency
每个操作都必须是合法的,账户信息应该从一个有效的状态变为另一个有效的状态。
- Case3:羊老师从抖音抢了一个亿红包,又从头条抢了一个亿,两个转账同时进行,假设他们都以为是从零开始更新羊老师的账户余额,羊老师最后得到一个亿。
隔离性 Isolation
两个操作在对同一个账户并发进行操作时,应该是相互不影响,表现的像是串行操作。
- Case4:抖音的账户上扣了一个亿,然后羊老师的账户上加一个小目标,但都还没写到磁盘上。这个时候,如果服务器挂了:
持久性 Durability
操作更新成功之后,更新的结果应该永久性的保留下来,不会因为宕机等问题而丢失。
1.3 红包雨 与 高并发
- Case5:全国14亿人,假设有10亿人同时开抢红包,每秒处理一个请求,那需要31年才能完成。春节完了,抖音可能也被大家嫌弃了...... ———— 高并发 Concurrency
1.3 红包雨 与 高可靠
- Case6:假设除夕晚上大家正在愉快的从抖音身上“薅羊毛”,这时候服务器挂了,程序员花了一个小时,头发都要掉光了,终于修好了。这时候发现李谷一老师《难忘今宵》都唱完了。“抖音宕机”秒上热搜....————高可靠、高可用 High Reliability/Availability
2. 发展历史
2.1 前 DBMS 时代
2.1.1 人工管理
在现代计算机发明出来以前,通过人工的方式进行数据记录和管理:
- 结绳记事
- 清代钱庄账本
- 用于1890年人口普查的霍列瑞斯式的打孔机
效率太低!
2.1.2 文件系统
1950s,现代计算机的雏形基本出现。1956年IBM发布了第一个的磁盘驱动器--Model 305 RAMAC,从此数据存储进入磁盘时代。在这个阶段,数据管理直接通过文件系统来实现。
写到纸上编程写到文件里,变了个马甲
2.2 DBMS 数据模型
2.2.1 网状模型
网状模型数据库所基于的网状数据模型建立的数据之间的联系,能反映现实世界中信息的关联,是许多空间对象的自然表达形式。1964年,世界上第一个数据库系统————继承数据存储(Integrated Data Storage,IDS)诞生于通用电气公司。IDS是世界上第一个网状数据库,奠定了数据库发展的基础,在当时得到了广泛的应用。在1970s网状数据库系统十分流行,在数据库系统产品中占据主导地位。
网状数据模塑是以记录类型为结点的网络结构,即一→个结点可以有→个或多个下极境点,也可以有一个或多个上圾话点,两个锋点之间甚至到可以有多种联系,他如以数门与请程两个记最灵型、可以有'任畏和棋导两娥系,称之为合钱,两个记录类型之间的值可以是多对多的联系,例如一门课程被多个学生修读,一个学生选修多门课程。
2.2.2 层次模型
1968年,世界上第一个层次数据库————信息管理系统(Information Management System,IMS)诞生于IBM公司,这也是世界上第一个大型商用的数据库系统。层次数据模型,即使用树形结构来描述实体及其之间关系的数据模型
层次数据库就是树结构。每棵树都有且仅有一个很节点,其余的节点都是非很节点。每个节点表示一个记录类型时应与实体的概念,记录类型的各个字段对应实体的各个属性。各个记录类型及其亨段部必须记录。
2.2.3 关系模型
1970年,IBM的研究员E.F.Codd博士发表了一篇名为“A Relational Model of Data for large Shared Data Banks”的论文,提出了关系模型的概念,奠定了关系模型的理论基础。1979年Oracle首次将关系型数据库商业化,后续DB2,SAP Sysbase ASE, and Informix等知名数据库产品也纷纷面世。
使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
关系数据模型中,无论是是实体、还是实体之间的联系都是被映射成统一的关系——张二维表,在关系模型中,操作的对象和结果都是一张二维表,它由行和列组成;
关系型数据库可用于表示实体之间的多对多的关系,只是此时要借助第三个关系—表,来实现多对多的关系;
2.2.4 DBMS数据模型
| 网状模型 | 层次模型 | 关系模型 | |
|---|---|---|---|
| 优势 | 能直接描述现实世界;存取效率较高 | 结构简单;查询效率高;可以提供较好的完整性支持 | 实体及实体间的联系都通过二维表结构表示 |
| 劣势 | 结构复杂;用户不易使用;访问程序设计复杂 | 无法表示M:N的关系;插入、删除限制多;遍历子节点必须经过父节点;访问程序设计复杂 | 关联查询效率不够高;关系必须规范化 |
1974年ACM牵头组织了一次研讨会,会上开展了一场分别以Cod和1Bachman为首的支持和反对关系数据库两派之间的鹏论。这次著名的辩论推动了关系数据库的发展,使其最终成为现代数捱奔产品的主流,
2.3 SQL语言
1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言
- 语法风格接近自然语言
- 高度非过程化
- 非关系数据模型的数据操纵语言是面向过程的语言,用其完成用户请求时,必须指定取路怪。而用SQL进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
- 面向集合的操作方式
- SQL采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合
- 语言简洁,易学易用
- SQL的功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE,且SQL语言语法简单,接近英语口语,因此容易学习,也容易使用。
UPDATE account_table SET balance = balance - '小目标' WHERE name = '抖音';
- Find account_table
- Search account_table and compare name to '抖音'
- Calculate balance - '小目标'
- Write new balance back to account_table