DBMS中的阻塞因素

时间:2013-04-07 05:05:43

标签: database indexing

DBMS中的阻塞因素是什么,

我看到的位表示它是每条记录的块的浮动值(所以B / R楼层),其中B是块大小,R是记录。我只是想知道,有人可以告诉我使用它的主要原因,以及它是否真的是FLOORED?

对于任何想知道的人,我对FLOORED的理解是1.5得到1.0。

1 个答案:

答案 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次磁盘访问中。那真是太棒了。我们甚至可以做得更好。 :)

好的,所以你可以看到阻塞因子在这个计算中很重要。