不同存储结构的文件磁盘io操作次数_数据存储技术:单机篇

通常来说,业务应用系统 = 数据存储 + 逻辑处理 + 网络传输。其中的数据存储是系统的根基。

在业务应用系统中,需要持久化到磁盘的数据,一般保存在这些存储系统中:

  • 关系型数据库:mysql,等
  • 键值系统(NOSQL):redis,等
  • 搜索引擎:ElasticSearch,等
  • 文件系统:图片、视频等独立文件,log日志,等

存储系统的功能包括:增、删、查、改。其中,读又分为随机读取和顺序扫描。

磁盘数据存储结构有:

  • 随机查找型:
    • B树、LSM树
    • 哈希
  • 顺序扫描型:
    • 文件append

磁盘机制

内存 vs 磁盘:内存数据在电脑断电重启后会丢失,所以要保存下来的数据文件都需要持久化到磁盘。

磁盘读写时涉及到磁盘上数据查找,数据地址一般由柱面号、盘面号和块号三者构成。磁盘读取依靠的是机械运动,也就是说移动臂先根据柱面号移动到指定柱面,然后根据盘面号确定盘面的磁道,最后根据块号将指定的磁道段移动到磁头下,便可开始读写。

整个过程主要有三部分时间消耗:查找时间(seek time) 、等待时间(latency time)、传输时间(transmission time) ,分别表示定位柱面的耗时、将块号指定磁道段移到磁头的耗时、将数据传到内存的耗时。

其中整个磁盘IO最耗时的地方在查找时间(即磁盘寻道),顺序访问的查找时间开销比较小,随机访问则需要较长的磁盘寻道时间。

8d52503314bd3fa295d1c96cbc86143f.png

15000转的SATA盘的顺序读取带宽可以达到100MB/s以上,则顺序读取1MB数据的耗时为100KB / 100MB/s * 1000 = 1ms;而磁盘寻道的耗时则需要10ms。

可以看出,磁盘顺序读写数据的带宽还是不错的;存储系统的性能瓶颈主要在于磁盘随机读写:
从磁盘读取100KB数据的耗时 = 磁盘寻道时间10ms + 数据读取时间1ms = 11ms

如果能尽量避免磁盘随机读写,尽量减少磁盘寻道的次数,则可以很大地提升存储系统的性能。比如,将随机读写转化为顺序读写,通过缓存减少磁盘随机读写,等。

a66653ffb0aa63c1d116ee98660301dc.png

B-tree

B树存储引擎是B树的持久化实现,不仅支持单条记录的增、删、查、改,还支持顺序扫描。

通常用于实现关系型数据库。

平衡二叉树、B树、B+树

先回忆下,平衡二叉树、B树、B+树是长什么样子的:

  • 平衡二叉树:平衡查找树,即每次插入后都会通过旋转节点保持平衡的有序二叉树

96638c2afdadae4124febe53730e11c9.png
  • B树:多路平衡查找树

847b6bbe33330b731874fb478662e159.png
  • B+树:多路平衡查找树

与B树最大的不同是内部结点不保存数据,只用于索引;所有数据(或者说记录)都保存在叶子结点中;叶子结点本身依关键字的大小自小而大顺序链接;并且每个叶子结点都存有相邻叶子结点的指针。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值