磁盘读取数据原理(数据库查询性能分析)

1、磁盘结构

磁盘由一层一层的盘片组成,每个盘片区分上下面,每个盘面由磁道组成,磁道上凹凸不平,其中凸起的地方代表被吃划过即数字1,反之,凹的地方表示数字0,故磁盘可以用二进制存储来表示文字、图片等信息。同时,各盘面相同半径的磁道组成柱面。磁盘还有另外一个重要组件,磁头,不同盘面上的磁头是同时移动的。

2、磁盘读写

磁盘上的数据可以通过(柱面号、盘面号、块号)来唯一标示。因此读写磁盘上某一数据时需要经过以下步骤:

  • 移动磁头至相关柱面;
  • 确定盘面号后,盘片开始旋转至指定块号即可。

经过以上步骤后,开始读写数据。其操作时间可以表示为:

                               寻道时间+盘片旋转时间+磁盘数据写入内存时间

其中,磁道时间耗时最长,约100ms左右;盘片旋转一般为7200转/分,即一圈需要约8ms;数据通过系统总线传输至内存一般为0.02us/B,即20ms/MB。

可以试一试在数据库中10次查询top 10000的数据与1次查询100000的数据时间,看看有何不同。

还需注意一个问题,寻道时间还与磁头上次所在位置有关,故而测试时最好能够想办法将其置于同一位置,然后进行对比。

3、其他

在大规模数据存储方面,其数据存储在外存磁盘中,而在外存磁盘读写数据时,首先需要定位磁盘中的块号,因此有必要设计合理高效的外存数据结构。可以联想到ES中倒排索引结构,Mysql中的b-tree(其中es比mysql中在内存中增加了term index,“索引的索引”)。

猜你喜欢

转载自blog.csdn.net/jinyidong/article/details/82290667