数据存储结构习题记录

  1. 考虑空闲空间映射的位图表示,其中对于文件中的每个块,位图中维护两个位。如果块的填充度在 0% 到 30% 之间,则位为 00;如果块在 30% 到 60% 之间,则位为 01;如果块在 60% 到 90% 之间,则位为 10;如果块在 90% 以上,则位为 11。即使对于相当大的文件,这样的位图也可以保存在内存中。
    1. 概述对一个块使用两比特而不是一个字节的两个优点和一个缺点。
      :节省了空间,每个块只需要两个位而不是八个位;提高了效率,每次可以检查四个块而不是一个块。一个缺点是:精度降低了,每个块的填充度只能用四种状态表示,而不是百分比。
    2. 描述如何使位图在记录插入和删除时保持最新。
      :为了使位图在记录插入和删除时保持最新,需要在每次操作后更新相应的块的位。例如,如果在一个填充度为 60% 的块中插入一条记录,使得填充度超过了 90%,则需要将该块的位从 10 改为 11。同样,如果在一个填充度为 90% 的块中删除一条记录,使得填充度降到了 60%,则需要将该块的位从 11 改为 10。
    3. 概述位图技术相对于空闲列表在搜索空闲空间和更新空闲空间信息方面的优势。
      :搜索速度更快,可以一次比较多个块的位,而不是遍历链表;更新操作更简单,只需要修改位,而不是插入或删除节点。
  2. 能够快速找出缓冲区中是否存在块,以及如果存在则找到它位于缓冲区中的位置非常重要。鉴于数据库缓冲区大小非常大,你将使用什么(内存中的)数据结构来完成此任务?
    :一种可能的数据结构是哈希表,其中键是块标识符,值是缓冲区位置。哈希表可以提供键值对的快速查找和插入,并且可以使用链接或开放寻址来处理冲突。如果需要,哈希表还可以动态调整大小以容纳更多块。
  3. 假设大学有大量多年积累的成绩记录。解释如何在 成绩关系上进行表分区,以及它可以提供什么好处。还请解释该技术的一个潜在缺点。
    :可以按年份进行表分区。表分区可以提供以下好处:提高查询性能,因为可以只扫描相关的分区,而不是整个表。提高更新性能,因为可以并行地对不同的分区进行操作。提高可用性,因为如果某个分区出现故障,其他分区仍然可以访问。提高存储管理,因为可以根据不同分区的访问频率和重要性,将它们存储在不同的设备上。表分区的一个潜在缺点是:增加了设计和维护的复杂度,因为需要确定合适的分区属性和数量,以及处理跨分区的操作。
  4. 给出以下每种情况下的关系代数表达式和查询处理策略的示例:
    1. MRU 优于 LRU
      :当查询处理策略涉及重复扫描同一关系时,MRU 优于 LRU。例如,如果查询是 σ a = 1 ( R ) ⋈ σ b = 2 ( S ) σ_{a=1}(R) ⋈ σ_{b=2}(S) σa=1(R)σb=2(S),并且策略是扫描 R 并且对于每个元组,扫描 S 以查找匹配的元组,那么使用 MRU 将替换 S 中刚刚访问的块,因为在遍历下一个 R 的元组时,会从头访问最近最久未使用的块。
    2. LRU 由于 MRU
      :当查询处理策略涉及不同关系的一次性扫描时,LRU 优于 MRU。例如,如果查询是 π a ( R ) ∪ π b ( S ) π_a(R) ∪ π_b(S) πa(R)πb(S),策略是分别扫描 R 和 S 并合并它们的结果,那么使用 LRU 会尽可能长时间地将 R 和 S 的块保留在缓冲区中,而使用 MRU 将在扫描后立即替换它们。
  5. PostgreSQL 通常使用一个小缓冲区,将其留给操作系统缓冲区管理器来管理可用于文件系统缓冲的其余主内存。解释 (a) 这种方法的好处是什么,以及 (b) 这种方法的一个关键限制。
    :(a) 这种方法的好处是可以利用操作系统缓冲区管理器的优化和功能,例如预读、写回、缓存共享等,而不需要在数据库系统中实现这些功能。这样可以减少数据库系统的开发和维护成本,以及避免重复缓存同一个块的开销。 (b) 这种方法的一个关键限制是操作系统缓冲区管理器不能感知数据库系统的需求和语义,例如事务的原子性和持久性,以及查询的访问模式和优化目标。这样可能导致操作系统缓冲区管理器做出不合适的决策,例如提前写回脏块,或者替换有用的块。
  6. 在可变长度记录表示中,空位图用于指示属性是否具有空值。 a. 对于可变长度字段,如果值为空,那么偏移量和长度字段中会存储什么?b.在某些应用中,元组具有大量属性,其中大部分为空。能否修改记录的表示形式,使空属性的唯一开销是空位图中的单个位?
    :a. 对于变长字段,如果值为 null,那么在偏移量和长度字段中存储的是 0。这表示该字段没有实际的值,也不占用任何空间。 b. 将所有非 null 的变长字段按照属性顺序存储在记录末尾,并在记录开头存储一个指针数组,其中每个指针指向一个变长字段的起始位置。这样,如果一个变长字段为 null,就不需要为它分配空间,也不需要在指针数组中存储它的偏移量和长度。只需要在 null 位图中将对应的位设置为 1 即可。
  7. 解释为什么记录在块中的分配会显着影响数据库系统的性能。
    :(1)记录分配的方式决定了块的填充度,即每个块中存储的记录的数量。块的填充度影响了磁盘 I/O 的开销,因为每次读写一个块需要一定的时间。如果块的填充度高,那么每次读写一个块可以获取更多的记录,从而减少 I/O 次数;如果块的填充度低,那么每次读写一个块只能获取少量的记录,从而增加 I/O 次数。(2)记录分配的方式也决定了记录在块中的顺序,即每个记录在块中的位置。记录在块中的顺序影响了查询处理的效率,因为不同的查询可能有不同的访问模式。例如,如果查询需要按照某个属性排序,那么最好将记录按照该属性在块中排序,这样可以减少排序的开销;如果查询需要按照某个属性进行范围查找,那么最好将记录按照该属性在块中聚集,这样可以减少扫描的开销。
  8. 列出以下存储关系数据库的每种策略的两个优点和两个缺点:a. 将每个关系存储在一个文件中。b.将多个关系(甚至整个数据库)存储在一个文件中。
    a. 优点:简化了文件管理,因为每个关系都有一个唯一的文件名,可以方便地创建、删除和修改;提高了访问性能,因为可以根据关系的属性和索引来优化文件的组织方式,例如顺序、堆或散列。缺点:增加了存储开销,因为每个文件都需要一定的元数据和空间来管理;降低了查询效率,因为涉及多个关系的操作,如连接或投影,需要打开和关闭多个文件。b. 优点:减少了存储开销,因为只需要一个文件来管理所有的关系;提高了查询效率,因为涉及多个关系的操作,如连接或投影,只需要打开和读取一个文件。缺点:增加了文件管理的复杂度,因为需要在一个文件中区分不同的关系,并维护它们的元数据和索引;降低了访问性能,因为不能根据每个关系的属性和索引来优化文件的组织方式,而只能使用一种通用的方式,如堆或散列。
  9. 标准缓冲区管理器假设每个块的大小相同并且读取成本相同。考虑一个缓冲区管理器,它使用对象引用率,而不是 LRU,即在过去 n 秒内访问对象的频率。假设我们想要在缓冲区中存储不同大小和不同读取成本的对象(例如网页,其读取成本取决于从中获取它们的站点)。缓冲区管理器如何选择从缓冲区中逐出哪个块。
    :一个可能的方法是,缓冲区管理器可以维护一个优先级队列,其中每个对象的优先级由以下公式计算:优先级 = (对象的大小 / 对象的访问率) * (对象的读取成本 / 对象的访问率)。这个公式反映了对象的价值和开销的比例,以及对象的访问频率。对象的大小和读取成本越大,对象的优先级越高;对象的访问率越高,对象的优先级越低。当缓冲区需要替换一个对象时,缓冲区管理器可以选择优先级队列中优先级最高的对象,即价值最低且开销最高的对象,将其从缓冲区中移除。

你可能感兴趣的:(数据库,数据库)