Sim*_*Sim 12 database indexing
DBMS中的阻塞因素是什么,
我看到的位表示它是每条记录的块的浮动值(所以B/R层),其中B是块大小,R是记录.我只是想知道,有人可以告诉我使用它的主要原因,以及它是否实际上是FLOORED?
对于任何想知道的人,我对FLOORED的理解是1.5到1.0.
Tar*_*mán 45
(块是底层存储系统(hdd,san fs等)愿意处理的最小数据单元.传统上,硬盘驱动器的大小为512字节.)
它是因为如果适合100个半记录,每个块只存储100个记录.
阻塞因子在许多与dbms相关的计算中被大量使用.
例如:
我们有1 000 000条记录.每条记录长80个字节.每条记录都包含一个唯一的密钥(让我们说社会安全号码).我们希望通过他们的社会安全号码来查找某人是快速的.
我们需要一些东西来衡量绩效.花费最多时间的事情是从硬盘中询问一个块.你知道,它是一种机械装置.它必须重新定位它的头部和blabla,因此与CPU的速度相比,或者与操作内存(RAM)访问的速度相比,它实际上是一个缓慢的操作.好的,我们可以说我们通过多少次磁盘访问来衡量一项操作的性能.我们希望最小化磁盘访问次数.好的,现在我们知道如何判断某些事情是缓慢还是快速.
许多磁盘访问 - >坏
很少磁盘访问 - >好
让我们说在我们想象中的hw,每个块是5000字节.我们想要计算我们需要多少块.首先,我们需要知道有多少记录适合单个块:
Blocking factor
= floored((Block size)/(Record size))
= floored(5000/80)
= floored(62.5)
=62 record/block
我们有10000000条记录,因此我们需要ceiled(10000000/62)=ceiled(161290.32)=161291
块来存储所有数据.
如果要读取所有块以通过密钥(社会安全号码)查找单个记录,那么将需要161291个磁盘访问.不好.
我们可以做得更好.让我们构建一个索引文件.我们将构建一个稀疏索引.
数据库中的稀疏索引是一个文件,其中包含数据文件中每个块的键和指针对.此文件中的每个键都与指向已排序数据文件中块的特定指针相关联.在具有重复键的聚簇索引中,稀疏索引指向每个块中的最低搜索关键字.
好的,所以我们在每个块的索引文件中都有一个指针和一个键.让我们说在我们想象中的hw上,一个指针长4个字节,而在我们想象的世界中,社会安全号(密钥)占用6个字节.
因此,我们将为索引中的每个块存储一个10字节长的键 - 指针对.这些对中有多少适合单个块?
Blocking factor of the index file = floored(5000/10) = 500
Run Code Online (Sandbox Code Playgroud)
...所以这意味着500个键 - 指针对适合单个块.我们需要存储161291这些,因此索引文件将占用ceiled(161291/500)=323
块
索引文件按键排序,因此我们可以在其中进行二进制搜索,以找到指向包含记录的块的指针.在索引文件中执行二进制搜索会花费大多数ceiled(log2(323))=9
磁盘加入.我们还需要+1
磁盘访问来实际读取索引记录所指向的数据块.
哇,我们让我们的查找工作在10个磁盘访问.那真是太棒了.我们甚至可以做得更好.:)
好的,所以你可以看到阻塞因子很大,例如在这个计算中.