13

DBMS 中的阻塞因素是什么,

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

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

4

1 回答 1

52

是的,这意味着有多少完整的记录适合一个块。

(块是底层存储系统(hdd、san fs 等)愿意处理的最小数据单位。它的大小传统上是 512 字节的硬盘驱动器。)

它之所以被搁置是因为如果可以容纳 100 条半记录,那么每个块只能存储 100 条记录。

阻塞因子在许多与 dbms 相关的计算中被大量使用。

例如:

问题

我们有 10 000 000 条记录。每条记录长 80 字节。每条记录都包含一个唯一的密钥(假设是社会安全号码)。我们希望通过他们的社会安全号码快速查找某人。

但什么是快?

我们需要一些东西来衡量性能。花费最多时间的事情是从硬盘请求一个块。你知道,它是一种机械装置。它必须重新定位它的头部,并且blabla,因此与CPU的速度相比,或者与操作内存(RAM)访问的速度相比,它确实是一个缓慢的操作。好的,假设我们通过它需要多少磁盘访问来衡量操作的性能。我们希望尽量减少磁盘访问次数。好的,现在我们知道如何判断某事是慢还是快。

许多磁盘访问 -> 坏

很少的磁盘访问 -> 好

计算我们的数据需要多少块

假设在我们想象的硬件上,每个块是 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 次磁盘访问。不好。

我们可以做得更好。让我们建立一个索引文件。我们将建立一个稀疏索引

数据库中的稀疏索引是一个文件,其中包含数据文件中每个块的键和指针对。此文件中的每个键都与指向已排序数据文件中块的特定指针相关联。在具有重复键的聚集索引中,稀疏索引指向每个块中的最低搜索键。

好的,所以我们将在每个块的索引文件中都有一个指针和一个键。假设在我们想象的硬件上,一个指针有 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 个磁盘访问中工作。这真是太棒了。我们甚至可以做得更好。:)

好的,因此您可以看到阻塞因子在此计算中被大量使用。

于 2013-11-08T10:32:11.477 回答