Yes, it means how many whole records fit into a block.
(块是底层存储系统(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 次磁盘访问。不好。
我们可以做得更好。让我们建立一个索引文件。我们将建立一个sparse index。
数据库中的稀疏索引是具有键和指针对的文件
对于数据文件中的每个块。此文件中的每个键都关联
带有指向已排序数据文件中块的特定指针。在
具有重复键的聚集索引,稀疏索引指向
每个块中的最低搜索键。
好的,所以我们将在索引文件中为每个块创建一个指针和一个键。
假设在我们想象的硬件上,一个指针有 4 个字节长,而在我们想象的世界中,一个社会安全号码(密钥)占用 6 个字节。
因此,我们将为索引中的每个块存储一个 10 字节长的键指针对。
这些对中有多少对适合单个块?
Blocking factor of the index file = floored(5000/10) = 500
...所以这意味着 500 个关键指针对适合单个块。我们需要存储其中的 161291 个,因此索引文件将占用 ceiled(161291/500)=323 个块
索引文件是按key排序的,所以我们可以在里面进行二分查找,找到指向包含记录的块的指针。在索引文件中执行二进制搜索最多花费ceiled(log2(323))=9 磁盘访问。我们还需要+1磁盘访问才能真正读取索引记录指向的数据块。
哇,我们的查找可以在 10 次磁盘访问中工作。这真是太棒了。我们甚至可以做得更好。 :)
好的,所以你可以看到阻塞因子在这个计算中被大量使用。