📜  文件组织存储

📅  最后修改于: 2020-12-12 08:05:26             🧑  作者: Mango

文件组织存储

有多种方法可以将数据存储在数据库中。将数据存储在文件中就是其中之一。用户可以以有组织的方式将数据存储在文件中。这些文件在逻辑上按照记录序列进行组织,并永久驻留在磁盘上。每个文件分为固定长度的存储单元,称为Blocks 。这些块是存储分配以及数据传输的单位。尽管数据库中的默认块大小为4至8 KB,但是许多数据库允许在创建数据库实例时指定大小。

通常,记录大小小于块大小。但是,对于较大的数据项(例如图像),大小可能会有所不同。为了快速访问数据,要求一条完整的记录只能驻留在一个块中。它不应在一个或两个块之间部分划分。在RDBMS中,元组的大小在不同的关系中变化。因此,我们需要以多种长度来构造文件以实现记录。在文件组织中,有两种可能的方式来表示记录:

  • 定长记录
  • 可变长度记录

让我们详细讨论一下。

定长记录

定长记录意味着设置长度并将记录存储到文件中。如果记录大小超过固定大小,它将被分成多个块。由于大小固定,因此发生以下两个问题:

  • 将记录的子部分部分存储在一个以上的块中,需要访问包含该子部分的所有块以进行读取或写入。
  • 很难删除这种文件组织中的记录。这是因为,如果现有记录的大小小于块的大小,则另一个记录或部分将填满该块。

但是,包括一定数量的字节是上述问题的解决方案。它被称为文件头。分配的文件头包含有关文件的各种信息,例如第一条记录的地址。第二条记录的地址存储在第一条记录中,依此类推。此过程类似于指针。在固定长度的记录中,插入和删除的方法很容易,因为删除的记录留下或释放的空间与插入新记录所需的空间完全相似。但是此过程无法存储可变长度的记录。

可变长度记录

可变长度记录是大小不同的记录。它需要创建多个大小不同的块来存储它们。这些变长记录以下列方式保存在数据库系统中:

  • 在文件中存储多种记录类型。
  • 它保留为“记录”类型,以允许重复字段(如多集或数组)。
  • 它保留为“记录”类型,可以为一个或多个字段启用可变长度。

在可变长度记录中,存在以下两个问题:

  • 定义表示单个记录的方式,以便轻松提取各个属性。
  • 定义在块内存储可变长度记录的方式,以便轻松地在块中提取该记录。

因此,可变长度记录的表示可以分为两部分:

  • 记录的初始部分,具有固定长度的属性,例如数值,日期,用于存储其值的固定长度的字符属性。
  • 可变长度属性(例如varchar类型)的数据在记录的初始部分由(偏移,长度)对表示。偏移量是指记录开始的位置,而长度是指变量大小属性的长度。因此,初始部分存储有关每个属性的固定大小信息,即它是固定长度属性还是可变长度属性。

分页结构

在块内存储变长记录会出现问题。因此,这些记录以块内的分页结构组织。在时隙页面结构中,每个块的开头都有一个标题。该标头包含以下信息:

  • 标头中的记录条目数
  • 块中没有剩余空间
  • 包含有关记录的位置和大小的信息的数组。

插入和删除方法

可变长度记录以连续的方式驻留在块内。

当要插入新记录时,它将在可用空间的末尾获得位置。这是因为自由空间也是连续的。此外,标头用新插入的记录的大小和位置信息填充条目。

删除现有记录后,将释放空间,并且标题条目设置为删除。在删除之前,它将移动记录并占用该记录以创建可用空间。可用空间结尾获取更新。然后,所有可用空间再次在第一个记录和最后一个条目之间设置。

分页页面结构的主要技术是没有指针应直接指向记录。而是应指向包含其位置信息的标头条目。这将停止块内空间的碎片化,但支持指向记录的间接指针。