数据库复习之存储与索引

存储

磁盘空间管理
  1. 选择磁盘块大小作为页的大小。

  2. 跟踪空闲块:

    1. 维护一个空闲块的列表;
    2. 维护一个位图, 可以支持磁盘连续区域的快速识别和分配。
缓冲区管理器
  1. 把缓冲区划分为页集来管理可获得的主存,页集称为缓冲池。缓冲池中的主存页称为帧,即存放页的槽。

  2. pincount 和 dirty(请求页时缓冲区工作P课本240页) 。

  3. 缓冲区替换策略:LRU(最进最少使用策略),时钟替换(每一个帧有一个referenced位,在帧的pincount变为0时开始启动,current不断循环+1直到找到一个pincount为0且referenced位关闭的页,如果该页pincount为0但referenced位开启则关闭current+1继续查找),FIFO,MRU(最近经常使用策略),随机策略

记录文件(页的集合组织成一个文件)
  1. 堆文件页中的数据不以任何顺序排序,通过重复请求下个记录的方式搜索文件中所有记录,每个记录有一个rid。

  2. 页的链表形式:

    1. 《堆文件名,首页地址》的表得到首页地址。
    2. 首页指向两个双向链表(指针其实是页的id),有空闲空间的和没有空闲空间的。
    3. 缺点是记录变长时可能都在空闲空间的链表上。
  3. 页目录形式:

    1. DBMS记录每一个堆文件的第一目录页位置。
    2. 每一个目录项指向堆文件的一页(或一系列页)。空闲空间可以通过在目录项维护一比特位来管理,说明是否相应页有空闲空间,或是该页表明页上空闲空间的数量。
页格式(组织一页空间存储记录集合)
  1. 页由一组槽组成,每一个槽对应一个记录。记录由<页号,槽号>标识,这是使得外部通过<页号,槽号>找到对应记录。另一种方式是给每个记录一个整数rid,再维护一个rid到相应记录的<页号,槽号>表,这种方法开销大,不太好,所以一般使用第一种方法。

  2. 定长记录

    1. 前N个槽中存放记录。如果移动的记录被外部引用,则不能使用这种方法。

    2. 使用一个比特位数组来记录。

  3. 变长记录

    1. 维护一个槽目录,每个槽由<record offset, rcord length>对组成,这样子当记录在内部页移动时,页号和槽号都是不变的。删除时将长度变为-1即可,不可将槽号去掉否则会影响后续记录的槽号。插入记录时先扫描槽目录是否有空闲槽,有则放于该处,否则增加新的槽。

    2. 可以用于定长记录,如需要维护记录的某种排列顺序。

记录格式
  1. 定长记录:

  2. 变长记录:

    1. 由特殊分隔符分隔每个字段;
    2. 记录前面有一个字段偏移量数组(更好,可以直接访问每个字段,处理空值)。

索引

文件组织与索引

  1. 最简单的文件结构是无序文件(堆文件)

  2. 索引是组织数据记录的一种数据结构。

  3. 数据项指代存储在索引文件中的记录,搜索码值为k的数据项记为k*。数据项有三种形式(209页)第一种方式的索引是一种特殊的文件组织,不同于有序的文件记录。

  4. 一般只有第一种是聚簇索引,其他是非聚簇索引。

索引数据结构

树结构索引
ISAM(索引顺序存取方法)

完全静态,主叶子页的数目在文件创建期间是固定的,溢出页。不对索引级页加锁是ISAM优于B+树动态结构的一个重要优点。当数据分布和大小相对稳定而使得溢出链很少时,ISAM将优于B+树。可以顺序分配叶子页。

B+树
  1. 以下在讨论搜索,插入和删除算法时前提是不存在重复。

  2. 搜索:

  3. 插入:

    1. 插入如果引起叶子节点分裂,则将新旧节点分开的中间码复制上去。
    2. 如果又引起了索引节点分裂,则将中间码弹上去。
    3. 使用受限的重分布:叶子节点在分裂前先查看兄弟节点看是否能重分布,非叶子节点就不需要了(因为记录的整体趋势是增加,叶子节点的分裂需要记录前后兄弟节点指针,而索引节点不需要)。
  4. 删除:能重分布就重分布,不能重分布就合并节点。重分布只会影响父节点的某个值,合并节点则父节点要删除第二节点的索引项,可能还会影响高度。

  5. 处理重复问题:

    1. 使用溢出页来处理;
    2. 像处理其他项一样处理,搜索给定码值最左边数据项。
    3. 以数据项的第三种方式表示,即维护一个列表。
  6. 码压缩:减少搜索码所占空间(前缀码压缩:如果是字符串可能取前面几个字符即可,不需要全部)。

  7. 块加载B+树:已经有了数据集合,在某个字段上创建索引。先将数据项排序,为根分配一个空页,每个索引项指向数据项的一页,满了则进行分裂。

基于哈希的索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN(中国软件开发网)是一个技术交流平台,其中涵盖了各种领域的技术内容,包括数据库数据库复习是指回顾和巩固数据库的相关知识和技能。 数据库存储、管理和组织数据的一种数据结构。在软件开发中,数据库起到储存数据的作用,同时也提供了数据操作、查询和管理的功能。因此,深入理解数据库的原理和技术对于开发人员来说非常重要。 数据库复习的内容可以包括以下几个方面: 1. 数据库基础知识:了解数据库的概念、特点、分类和常用的数据库系统,如关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)。 2. SQL语言:掌握SQL语言的基本语法、查询、更新、删除和插入数据的操作,熟悉常用的SQL函数和操作符,能够编写复杂的SQL查询语句和数据操作语句。 3. 数据库设计:了解数据库设计的基本原则和范式,能够进行数据库的逻辑设计和物理设计,并能评估和调整数据库的性能。 4. 数据库索引和优化:理解数据库索引的原理和类型,了解索引的创建、使用和优化策略,能够通过合理的索引设计和优化来提升数据库的查询性能。 5. 数据库事务和并发控制:掌握数据库事务的概念和特性,理解并发访问引起的数据一致性问题,学会应对并发访问的技巧和控制策略。 6. 数据库备份和恢复:了解数据库备份和恢复的重要性,掌握常用的数据库备份和恢复方法和工具,能够制定和执行数据库的备份和恢复策略。 7. 数据库安全性:熟悉数据库的安全性问题和常见的安全攻击,能够使用数据库的安全机制和技术来防护和保护数据的安全。 通过对CSDN中数据库相关文章的阅读、学习和实践,可以加深对数据库的理解和掌握,提高数据库的设计和开发能力。此外,还可以通过访问CSDN的论坛和社区,与其他开发者交流和分享经验,进一步提升自己的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值