带你走进系统存储 | 青训营笔记

74 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第四篇笔记。

正文

RAID技术

image (3).png RAID技术有两部分组成,第一个是RAID0负责性能,第二部分是RAID1盘,负责安全。 RAID 0 分为两块磁盘:将数据一分为二吗,分别储存到两块磁盘里,加快读写速度 RAID 1 是拷贝磁盘,将数据拷贝到拷贝磁盘,保证数据不容易丢失。

实现高效,性能,安全,但同时也稍加成本

单机存储系统

image (4).png

流程:

数据写入内存MemTable

满后,写入Immutable MemTable

过一段时间会写入磁盘

写入磁盘一层层下沉

单机存储系统速度很快,但是也有一个问题,如果读的数据是很久之前存储的,那读取的速度就会越慢。

关系型数据库

image (5).png

流程:

memory:内存

page:写入数据

tempdata:临时数据

harddisk磁盘

page files:数据文件

redo log files : 日志

others:临时数据文件

#了解RDBMS

image (6).png

原子性:要不同时成功,要么同时失败。

一致性:每一步操作都是合法的。

隔离性:两个操作应相互不影响。

持久性:操作更新后,结果永久保留下来。

SQL引擎 - Optimizer

基于规则优化

image.png 条件化简: 优先连接最小的表,提高性能

基于代价优化

最常用的是基于时间为代价进行优化

image.png

image.png

image.png

那对于数据库而言,什么是一条SQL执行的代价呢? 其实,对于用户只能感知到查询时间这个代价,底层用了多少资源他是不在乎的。但是在并发的情况下,就得考虑资源消耗了,这个用户的查询占用的资源多了,其他用户的资源就少了。所以资源也是必须考虑的一点。 对于InnoDB 存储引擎来说,全表扫描的意思就是把聚簇索引中的记录都依次和给定的搜索条件做一下比较,把符合搜索条件的记录加入到结果集,所以需要将聚簇索引对应的页面加载到内存中,然后再检测记录是否符合搜索条件。 对于使用二级索引 + 回表方式的查询,设计MySQL 的大叔计算这种查询的成本依赖两个方面的数据:范围区间数量,需要回表数据量