美文网首页
数据读写机理小探之顺序读写

数据读写机理小探之顺序读写

作者: 淡淡的小番茄 | 来源:发表于2021-06-07 08:06 被阅读0次

如何磁盘读写能力

背景

由于机械磁盘的局限性,读写一条数据的时候,都会有寻址的过程,而此过程目前是通过机械运动来实现的(磁盘旋转、磁头移动等)。

这个过程是比较慢的,以7200转速的磁盘,平均寻址时间一般来说10ms左右。

局部性原理

如何提升读写性能,其实就是减少IO操作。

这就让我想到了局部性原理:

局部性原理是指无论程序指令还是数据都趋于聚集在一个较小的连续区域中。

有如下三种分类:

时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。

程序循环、[堆栈] 等是产生时间局部性的原因。

空间局部性(Spatial Locality):在最近的将来将用到的信息很可能与正在使用的信息在空间地址上是临近的。

顺序局部性(Order Locality):在典型程序中,除转移类指令外,大部分指令是顺序进行的。[顺序执行] 和非顺序执行的比例大致是5:1。此外,对大型[数组] 访问也是顺序的。指令的顺序执行、数组的连续存放等是产生顺序局部性的原因。

顺序读写

操作系统在进行IO读取的时候,采用了预读的方式,以此减少IO操作。预读的长度一般为页(page)的整倍数。

数据库在选择索引的数据结构时,利用了局部性原理和磁盘预读的相关概念,选择了B+树作为索引结构。

数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页(4KB),这样每个节点只需要一次I/O就可以完全载入。

B+数的高度一般不会超过3层,数据是临近的,也符合局部性原理。

树的高度小,也提升了检索速度。

对于数据的更新,由于磁盘是通过物理运动来实现磁盘的读写,所以他无法做到并发的读写,机械磁头就是一个,读A区域的数据,如果要读B区域,需要机械的运动到B区域。由于是机械运动,这个移动的成本还是比较高的。所以建议进行预读,而且顺序写性能是相当高的。

数据库为了解决写入的一致性这个问题,就有了锁的概念,写锁是排他锁。A线程写入的时候,不允许其他线程进行写入,只能等待。

多版本控制

对于读和写,通过MVCC,版本控制来解决。

通过在一行的计量上,增加版本号,和删除标识来实现。修改行数据的时候,是拷贝一行。此时别的线程进行读的是之前的版本,也就是镜像读。

修改完成后会将之前的版本置为已删除,最新记录为当前版本。标识已删除的记录,定期会进行清理。

比如mysql、hbase都是这么实现的。

相关文章

  • 数据读写机理小探之顺序读写

    如何磁盘读写能力 背景 由于机械磁盘的局限性,读写一条数据的时候,都会有寻址的过程,而此过程目前是通过机械运动来实...

  • 数据读写机理小探之不丢数据

    由于机械磁盘的物理局限性,使得随机读写的性能不高。为了提升数据落盘性能,就需要顺序写。很多中间件为了提升吞吐,在数...

  • 文件——随机读写

    文件位置标记及其定位 顺序读写文件时,每读写一个数据后,文件位置标记顺序向后移一个位置,然后在下一次执行读写操作时...

  • 磁盘顺序读写的区别

    随机和顺序读写,是存储器的两种输入输出方式。 随机读写占用空间多,但速度快,便于进行数据处理,而顺序读写速度慢,空...

  • c#读写txt文件

    按行顺序读写txt文件 按空格解析每行数据

  • Kafka-高效读写效率

    1读写方式 1.1 顺序读写磁盘 kafka得producer生产数据,要写入到log文件中,写的过程是一直追...

  • 05、听读说

    学英语的顺序是“听读说”。 听说读写,听说读写,为什么不是这个顺序?我们学中文是“听说读写”这个顺序,美国人学英语...

  • python 读写json数据

    6.2 读写json数据 使用json模块来读写json数据 其中json的dumps和loads函数就是借鉴了之...

  • 读写文件1

    //读写分为顺序读写(从文件开始读写)和随机读写(比如定位文件指示器后读取第1000个字节位置的字符) //***...

  • Django缓存之django—redis

    缓存 计算机的读写速度在不同的硬件中是不同的,通常读写速度由慢到快顺序为:硬盘文件 > 内存空间 > 寄存器【数据...

网友评论

      本文标题:数据读写机理小探之顺序读写

      本文链接:https://www.haomeiwen.com/subject/lbgzsltx.html