哈希文件组织和哈希索引组织之间有什么区别?

时间:2018-06-18 00:17:11

标签: database data-structures hash rdbms database-indexes

来自数据库系统概念

  

哈希可以用于两个不同的目的。

     
      
  • 在哈希文件组织中,我们通过计算一个函数来直接获取包含所需记录的磁盘块的地址   记录的搜索键值。

  •   
  • 在哈希索引组织中,我们将搜索关键字及其关联指针组织成哈希文件结构

  •   

“哈希文件结构”是什么意思?

我不确定,所以我不确定哈希文件组织和哈希索引组织之间有什么区别。 你能分别展示或改述它们是什么吗?

1 个答案:

答案 0 :(得分:2)

想象一下,你有两条记录,一条带有密钥" foo"和一个关键" bar"。我们只是说记录的长度固定为64字节,那就是" foo"哈希到0x4000和" bar"哈希值为0x0100。

在"哈希文件组织"中,您有一个带有搜索键并直接计算地址的函数。所以,如果你添加" foo"和" bar"到文件," foo"的记录将从文件中的地址0x4000开始," bar"记录将从文件中的地址0x0100开始。

该文件看起来像这样:

Address Range         Contents
-------------         --------
0x0000 - 0x00FF       empty space
0x0100 - 0x013F       "bar" record
0x0140 - 0x3FFF       empty space
0x0400 - 0x403F       "foo" record

在"哈希索引组织"中,您有一个辅助数据结构 - 索引 - 可以告诉您特定记录的起始位置。假设文件为空,并添加" foo"。您的哈希函数计算值0x4000。您将其添加到索引(哈希映射或类似的东西),并且由于文件为空,分配的值为0.当您添加第二条记录时," bar",添加了0x0100的哈希键,分配的值为0x0040。你有一个索引:

Key     Value
-------------
0x0100  0x0040
0x4000  0x0000

文件看起来像这样:

Address Range        Contents
-----------------------------
0x0000 - 0x003F      "foo" record
0x0040 - 0x007F      "bar" record

当然,您必须将索引存储在某处。它可以位于单独的文件中,也可以位于数据文件的前面或后面,也可以分散在整个文件中。有很多不同的可能性。

在第一种情况下,文件中浪费了大量空间,但您可以直接查找记录的位置:哈希密钥,结果是记录的地址。

在第二种情况下,您对密钥进行哈希处理,然后在索引中查找结果以获取记录的密钥。这里的主要优点是它可能会在文件中节省大量空间,但是您无法存储索引的位置。

在任何一种情况下,您都必须有一些解决哈希冲突的方法。