55 数据库中较为底层的结构:文件存储、文件结构和文件索引

2018-11-28  本文已影响15人  夏威夷的芒果

数据库物理层简介

在之前的课程中,我们主要介绍了数据库系统中“较高层次”的结构,例如关系模型、表的结构等逻辑或概念模型,这是数据库符合数据库最初创建的原因的。因为我们想让数据库的用户尽可能地只关注于如何满足和实现自己的需求,而不用考虑数据是如何在数据库中存储的或者如何被查询到的,这样“封装”的思想在程序员世界中经常可以见到。

但是了解一下数据库在物理层面是如何组织的,可以帮助我们对数据库管理系统有更深的了解。首先在这一节中,我们将向大家介绍一些常见的存储介质。

常见的物理存储介质

在计算机系统中,有很多种物理存储介质,它们的存取速度和价格各有不同,因此它们各自适用的场景也不同,常见的物理存储介质有以下几种:

这几种存储器从上至下,读写速度越来越慢、存储容量越来越大、价格越来越便宜。目前看来,还没有既物美又价廉的存储介质,每种介质都有适合它发挥能量的场景。

练习

image.png

数据是如何被存储的

定长记录的两个问题

不定长记录

文件组织方式

索引存在的意义

稠密索引

很明显,在检索记录的时候,使用稠密索引可以更快的定位到目标记录,但是稀疏索引可以节省占用的空间,并且减少由于维护和操作指针带来的开销。在实际的数据库中,我们必须综合考虑效率、占用空间和开销,争取达到某个平衡。通常采用的做法是,根据每次能被内存读入的数据块大小设置稀疏索引,每一个数据块对应一个索引项,这样可以很好地节省空间。等到占用空间并不大的数据块读入到读写速度较快的内存之中,就可以采取遍历记录的方式进行查找,这样做的效率是很可观的。

但是这样做就足够了吗?这可不一定。

多级索引

多级索引在数据库系统中应用十分广泛,它是一种非常理想的索引方式,在下一节中我们将为大家介绍实际数据库中常常采用的一种多级索引结构 B+ 树索引。不过我们先做一道题巩固一下今天所学的知识。

练习

什么是 B+ 树

顺序索引的一个致命缺点就是随着数据量的增加,在索引中搜索的效率不断下降。虽然效率的下降速度可以通过重新组织文件的方式有所延缓,但是高频率地进行文件组织更新也是我们不愿意看到的,它会耗费大量的时间和内存。

B+ 树索引是一种可以保证索引效率的结构,不管数据库中添加或删除多少数据,查询的效率是稳定的。这是因为它是一种 平衡树(balanced tree),从根节点到叶子节点的每一条路径的长度是一样的。它的每个非叶子节点都有 n/2 到 n 的子节点,其中n在每一棵平衡树中为一个确定的值。

从本质上讲,B+ 树仍然是一种多级索引,但是它的结构不同于顺序的多级索引。下图是一个 n = 5 的 B+ 树索引结构。


在 B+ 树中,非叶子结点上存储着子树中最大或最小的关键字,这样一来所有的叶子节点都是按照从小到大或从大到小的顺序排列的。如果将每一个非叶子节点的子树顺序交换,相应的,叶子节点的排列顺序也要颠倒。




练习

为啥用哈希

哈希函数

哈希桶的溢出

哈希索引

上一篇 下一篇

猜你喜欢

热点阅读