DBMS中的阻塞因素是什么,
我看到的位表示它是每条记录的块的浮动值(所以B / R楼层),其中B是块大小,R是记录。我只是想知道,有人可以告诉我使用它的主要原因,以及它是否真的是FLOORED?
对于任何想知道的人,我对FLOORED的理解是1.5得到1.0。
答案 0 :(得分:43)
<强> Yes, it means how many whole records fit into a block. 强>
(块是底层存储系统(hdd,san fs等)愿意处理的最小数据单元。传统上,硬盘的大小为512字节。)
它是因为如果适合100个半记录,每个块只存储100个记录。
阻塞因子在许多与dbms相关的计算中被大量使用。
例如:
我们有1 000 000条记录。 每条记录长80个字节。 每条记录都包含一个唯一的密钥(让我们说社会安全号码)。 我们希望通过他们的社会安全号码来查找某人是快速的。
我们需要一些东西来衡量绩效。 花费最多时间的事情是从硬盘中询问一个块。 你知道,它是一种机械装置。它必须重新定位它的头部和blabla, 所以与CPU的速度相比,它的运行速度确实很慢, 或与手术记忆(RAM)访问的速度相比。 好的,我们可以说我们通过多少次磁盘访问来衡量一项操作的性能。我们希望最小化磁盘访问次数。 好的,现在我们知道如何判断某些事情是缓慢还是快速。
许多磁盘访问 - &gt;坏
极少数磁盘访问 - &gt;好
让我们假设在我们想象中的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个磁盘访问。不好。
我们可以做得更好。让我们构建一个索引文件。我们将构建一个sparse index。
数据库中的稀疏索引是一对包含键和指针的文件 对于数据文件中的每个块。此文件中的每个键都是关联的 带有指向已排序数据文件中块的特定指针。在 具有重复键的聚簇索引,稀疏索引指向 每个块中最低的搜索键。
好的,我们将在每个块的索引文件中都有一个指针和一个键。 让我们说,在我们想象中的hw上,指针长度为4个字节,在我们想象的世界中,社会安全号码(密钥)占用6个字节。
因此,我们将为索引中的每个块存储一个10字节长的键 - 指针对。 这些对中有多少适合单个块?
Blocking factor of the index file = floored(5000/10) = 500
...所以这意味着500个键 - 指针对适合单个块。我们需要存储161291个,因此索引文件将占用ceiled(161291/500)=323
块
索引文件按键排序,因此我们可以在其中进行二进制搜索,以找到指向包含记录的块的指针。在索引文件中执行二进制搜索最多需要ceiled(log2(323))=9
个磁盘接入。我们还需要+1
磁盘访问来实际读取索引记录所指向的数据块。
哇,我们的查询工作在10次磁盘访问中。那真是太棒了。我们甚至可以做得更好。 :)强>
好的,所以你可以看到阻塞因子在这个计算中很重要。