首页 > 其他分享 >[15-445]Database Storage2 related memo

[15-445]Database Storage2 related memo

时间:2022-11-10 19:49:44浏览次数:35  
标签:15 Database memo 合并 更新 数据库 io 数据 我们

Storage 1 主要介绍了 slotted-page 组织数据的情况。但是这种方式会有一些问题比如

1. 页分裂 (比如在一个页上面操作,后续对其进行操作可能会有删除的操作后续可能需要使用 compaction 来合并对应页以释放空间)

2. 无用的 io 消耗。比如说如果我们使用 MySQL 我们要拿单个数据我们最小的查询单位是页,那么我们最少需要读取 16kb 页大小的数据,然后再寻址访问对应数据。

3. 随机的 io 访问,可能会导致我们到处寻找大量不连续的页,但是我们又只需要这些页里面的某些小数据,造成大量随机访问。

 

Log-Structured Storage

所以为了解决 slotted-page 组织数据的问题,有了高性能插入数据库或者 k-v 数据库经常会使用的数据组织结构 log-structured. 他的特点就是永远往下写,数据 persist 了之后就不会再去修改,当我们需要更新的时候我们会追加一个更新操作,而不是满磁盘找数据页然后读进内存,然后再更新再写回。这样效率就会高非常多,又因为在机械硬盘时代,如果我们一直对一个文件进行追加,我们可以充分受益于顺序读写获得超高的 io 效率。

但是任何东西都是有代价的,当我们不停追加内容的时候,我们终归有一天会写满 files 或者将它写得非常大,所以中间我们需要合并重复的数据或者直接删除不存在的数据来释放空间。

下面这张 slice 说明了这个文件,我们合并 并且有了层级的概念。我们默认不停写且无顺序的是 level0,当我们写的文件大小或者某种条件达到了我们设定的阈值。我们就将老的文件根据 key 合并排序然后变成一个更大的文件进行下一级。

 

 那么这种组织形式不太好的地方是什么呢?

1. 写放大。

2. 合并成本高。

其实早些时候很多数据库使用该数据结构都面临合并成本高的问题,甚至有一些超大规模排序合并会 stop the world 。。。这是最大的问题。

关于写放大说的是,当我们写入一条记录之后,但我们又不再更新它。它依然会在合并的时候被读出来,并且又重新写入到合并后的页中,反复循环直到进入更高的层级。

后面说了一些字段类型在各不同数据库中的支持,和 schema 的支持。dbms 会存储 catelog 来存储表的 schema 信息和字段的信息。

 

Reference:

https://15445.courses.cs.cmu.edu/fall2022/slides/04-storage2.pdf

 

标签:15,Database,memo,合并,更新,数据库,io,数据,我们
From: https://www.cnblogs.com/piperck/p/16878539.html

相关文章

  • day15-HTTP协议02
    HTTP协议029.HTTP练习练习一请写一篇关于HTTP协议的笔记,要求:描述清楚HTTP请求头,响应头的格式请求头:响应头:请求头和响应头中各个头字段的含义(请求头和响应头......
  • zt Xilinx FPGA PTP IEEE1588使用
     https://blog.csdn.net/Zhu_Zhu_2009/article/details/98208167参考Zynq-7000APSoC-PrecisionTimingwithIEEE1588v2ProtocolTechTipXilinxTSNSolutionLin......
  • 题解 P3974【[TJOI2015]组合数学】
    postedon2022-10-2814:11:41|under题解|sourceproblem给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走。问至少走多少次才能将财宝捡完。此对......
  • ORA-27101: shared memory realm does not exist Oracle连接不上
    Oracle报错:ORA-27101:sharedmemoryrealmdoesnotexist、ORA-01034:ORACLEnotavailable应对方法是1.重启服务器(这个简单就不说了)。2.重启Oracle.(操作看下图) 操作......
  • Go 面试每天一篇(第 15 天)
    我们应该坚信美好的事物一定会发生,毫不怀疑地坚信,加油!继续我们的每天一篇,看下​​昨天题目​​的解析:1.参考代码及解析:C。知识点:常量,Go语言中的字符串是只读的。2.参考......
  • 编译时:virtual memory exhausted: Cannot allocate memory
    一、问题      当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtualmemoryexhausted:Cannotallocatememory的问题,可以用swap扩展内存的......
  • 15. 三数之和
    15.三数之和给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0......
  • URAL 1517 Freedom of Choice
    DescriptionBackgroundBeforeAlbanianpeoplecouldbearwiththefreedomofspeech(thisstoryisfullydescribedintheproblem "Freedomofsp......
  • LuoguP1586 题解
    也可以在LuoguP1586(tencentcs.com)获得更好的阅读体验。Luogu_P1586题解一道比较简单的题目,看到求种类数,考虑DP。设\(f_{i,j}\)表示第\(i\)个数划分为\(j\)......
  • HDU 2715 Herd Sums
    DescriptionThecowsinfarmerJohn'sherdarenumberedandbrandedwithconsecutiveintegersfrom1toN(1<=N<=10,000,000).Whenthecowscometot......