15.RDBMS| 青训营笔记

56 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

ACID

A两个操作要么同时成功,要么同时失败,不存在中间状态

C每个操作必须是合法的,账户信息应该是从一个合法状态变成另一个合法的状态

I两个操作对同一个账户应该互不影响

D更新的结果应该永久保存下来

数据库一定要有处理高并发的能力,高可用,高可靠,

网状数据库 层次模型 关系模型

网状模型 能直接描述现实世界,存取效率高,但是结构复杂,用户不易使用,访问程序设计复杂

层次模型 结构简单,相比网状模型做了抽象,所有实体都通过二维表表示,但是遍历子节点必须经过父节点,访问程序设计复杂

关系型数据库,最重要的,sql语言,语法风格接近自然语言,高度非过程化,面向集合的操作方式,语言简洁,易学易用。sql语言生命力非常旺盛,

关系型数据库的核心技术

sql语言,先被parser解析,生成一个语法树,语法树通过优化器,然后再进入执行器。执行的时候需要从文件中读数据,写日志,返回。

写日志是为了事务准备。

parser 语法分析,词法分析,语义分析,抓取关键字,比如update,set,表列名,常量,运算符,结束符。

语义分析:表存在吗等等

优化器:基于规则的,对sql进行简化;基于代价的优化,比如打车时候,不同路线耗时最短就是代价,IO,CPU,net,mem都是需要考虑的代价。

火山模型,

每个优化器调用next操作,访问下层优化器,获得下层优化器返回的一行数据,将行数据返回给上层。

优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单。

缺点:每计算一条数据多次函数调用开销,导致cpu效率不高

存储引擎 innodb

in memory,作为数据缓存的部分,每次io先写到buffer,再写磁盘。

磁盘:on disk,元信息, general tablespaces, undolog redolog

内存会做一个缓存,效率比较好一些。

bufferPool:多个instance,降低页面访问冲突,通过page_id通过hashmap找位置,然后通过lru,磁盘大于内存,所以如果没有命中,就去从磁盘调数据出来。

page:

事务引擎,实现acid。

原子性:undo log,事务回滚的做法,同时实现了mvcc,

隔离性:读锁机制实现,读读锁可以,不可以用写写锁,读写锁引入mvcc概念,读写互不阻塞,降低死锁概率,实现一致性读,

一致性:redo log 事务实现对修改进行保存,

企业实践

突增流量,大流量,sharding,业务数据进行水平拆分,代理转多台服务器进行写,数据库容量也可以扩展。代理连接池。一些突发事件的稳定性和可靠性,