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

数据库物理层简介

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

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

常见的物理存储介质

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

  • 缓存(cache)
    缓存是读写速度最快且单位花费最高的存储介质。一般来说,缓存的管理都是由操作系统进行的,在数据库中我们一般不涉及这类存储介质;

  • 主存(main memory)
    主存中存储的是操作指令和相关操作数据,它会与缓存有直接的数据交换。一般来说主存储器的大小都不足以容纳整个数据库,并且断电后主存中的数据将会丢失;

  • 闪存(flash memory)
    闪存也是计算机内存储器的一部分,与主存相比,它断电后数据不丢失。它读出数据的速度与主存相当,但写入数据较为缓慢,这是由于它在写入数据时需要事先擦除某个数据区块的内容,但是如果能妥善地管理数据块,它的写入速度还是非常可观的。我们通常用到的 USB 就是闪存的一种。

  • 磁盘存储(magnetic disk storage)
    磁盘存储器是最常用的存储数据库数据的介质,通常情况下,数据库的全体数据都存储在磁盘存储器中,在使用数据库时,系统从磁盘存储器中将相应的数据放入主存中进行操作,最终从主存写回磁盘存储器。磁盘存储器的价格较低,存储速度中等,很适合存储较大量的数据。

  • 光存储(optical storage)
    最常见的光存储器包括 CD、DVD 等,它们只能被写入一次,写入之后只能读取,因此也被称为 WORM-disk(write-once read-many disk)。

  • 磁带存储(tape storage)
    在进行数据库备份或存储档案数据时,经常用到磁带存储器。它的价格十分低廉但存储容量很大,不容易损坏并且可以长时间保存。因此在存储卫星产生的数据、备份规模较大或保存时间较长的数据时,会用到磁带存储。

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

练习

image.png

数据是如何被存储的

定长记录的两个问题

不定长记录

文件组织方式

索引存在的意义

稠密索引

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

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

多级索引

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

练习

什么是 B+ 树

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

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

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


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




练习

为啥用哈希

哈希函数

哈希桶的溢出

哈希索引

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359

推荐阅读更多精彩内容