蓝图

数据库自己管理磁盘数据和缓冲区,而不是通过操作系统管理(Os is not your friend.)。

三层视图

数据库以页(page)为存储数据的基本单位,文件(file)是一系列页的集合,页中存储页数据(data),形成文件-页-数据三层架构。

文件有不同的组织形式,页包含页头和页数据,页数据可以采用不同方式组织:元组,日志,索引。

黄色部分为课程会提及的内容。

采用Heapfile进行文件存储时的执行图:

  • 页目录:存储管理的页的元信息(空闲页,空页)
  • 页头:存储页的元信息(页大小,校验和,数据库版本,事务可见性,压缩元数据)

面向元组的数据存储

  • 通过<FileId, PageId, Slot>定位到一个指向tuple的指针(磁盘地址),然后找到tuple。

  • slot指针的灵活性:内部元组位置变化时,外部无感知;指针可以指向其他页,可以存储大数据(文件,大文本);支持变长记录。

  • 数据库会为每个元组分配一个数据记录的唯一标识(record identifier),来表示元组的物理位置。SQLite和Oracle中为ROWID,Pg中是CTID,<PageId, Slot>。但是他们对于应用程序是无用的。

  • Header包含:可见性信息;NULL Bit Map。

  • Data包含:行数据。

Tuple只是一个字符串(char[]),本身不存储类型信息,类型信息存在数据库的System Catalogs中。(为了保证数据紧凑;非自解释的)

存数据时会遇到的问题:

  • 数据对齐:填充,重排序

  • 精确值问题:BIGDECIMAL(转为字符串存储)

  • 空值:Bit Map;特殊值

  • 大值和文件:Overflow Page和External File。

    大值采用溢出页;大文件可以采用溢出页,也可以用外部文件系统存储,然后存储一个指向文件路径的指针,而不是直接存储文件内容(Oracle:BFILE, Microsoft: FILESTREAM)。

日志结构存储

基本概念:

  • 利写不利读,非原地更新:只有PUT和DELETE操作,顺序IO。查询时由最新到最老时查询日志。
  • 加速查询:索引。

  • 加速查询:日志压缩,且压缩时会排序日志。
  • 压缩方式:层级压缩,统一压缩

特点 Level Compaction Universal Compaction
层级结构 有多层级,L0、L1、L2 等 无层级结构,所有文件在同一级别
文件组织方式 每个层级内文件不重叠,跨层逐渐下推 基于文件大小和数量合并,文件可能有重叠
合并策略 层级压缩,按顺序下推合并 文件数量和大小超过阈值时触发合并
写放大 较高,因为需要不断下推文件至更低层级 较低,因为减少频繁合并
读放大 较低,因为相同键在每层只存在一次 较高,因为没有严格层级,需检查多个文件
适用场景 读多写少的场景 写多读少、实时数据的高写入场景

索引组织存储

直接用索引组织数据,数据挂在叶子结点上,Page内部的tuple有序。

SQLite和MySQL默认用这种方式组织数据,Oracle和SQL Server可选。

和基于元组的存储对比:

特性 Index-Organized Storage Tuple-Oriented Storage
数据与索引存储 数据存储在主键索引结构中 数据和索引独立存储
数据排序 数据按照主键顺序排序 数据无序存储
主键查询性能 高效,因数据已按主键排序 依赖主键索引,但数据本身无序
插入和更新性能 插入和更新时可能需要索引重排,较慢 插入和更新较快,无需主键排序
适用场景 主键查询频繁,数据顺序性强的场景 多种查询模式,插入和更新频繁的场景

cmu15545-数据存储(Database Storage)的更多相关文章

  1. web sql database数据存储位置

    Q1: 数据存储在哪儿? Web Storage / Web SQL Database / Indexed Database 的数据都存储在浏览器对应的用户配置文件目录(user profile di ...

  2. 利用HTML5开发Android(7)---HTML5本地存储之Database Storage

    在上一篇<HTML5本地存储之Web Storage篇>中,简单介绍了如何利用localStorage实现本地存储:实际上,除了sessionStorage和localStorage外,H ...

  3. 如何使用Iveely的数据存储引擎 Iveely Database

    Iveely 数据存储引擎是为Iveely 搜索引擎提供数据存储的机制. 适用于:频繁数据插入.数据读取.数据更改或者删除数据不适合Iveely Database,存储结构是按照搜索引擎数据存储要求( ...

  4. External Storage 数据存储

    一些数据存储的封装:http://hubingforever.blog.163.com/blog/static/17104057920129198236599/ External Storage数据存 ...

  5. 数据存储的两种方式:Cookie 和Web Storage

    数据存储的两种方式:Cookie 和Web Storage 1.Cookie Cookie的作用就像你去超市购物时,第一次给你办张购物卡,这个购物卡里存放了一些你的个人信息,下次你再来这个连锁超市时, ...

  6. 数据存储的两种方式:Cookie 和Web Storage(转)

    数据存储的两种方式:Cookie 和Web Storage   数据存储的两种方式:Cookie 和Web Storage 1.Cookie Cookie的作用就像你去超市购物时,第一次给你办张购物卡 ...

  7. Android开发7:简单的数据存储(使用SharedPreferences)和文件操作

    前言 啦啦啦~大家好,又见面啦~ 本篇博文讲和大家一起完成一个需要注册.登录的备忘录的,一起学习 SharedPreferences 的基本使用,学习 Android 中常见的文件操作方法,复习 An ...

  8. Android数据存储(一)----SharedPreferences详解

    一.Android数据的存储方式: Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File:此外还有一种网络存储 ...

  9. 基于 HTML5 的数据存储

    以前想做个静态网页APP.最初的思路是用本地文件存储数据,后来发现在手机上运行时,文件无法找到. 经过了长达几个月的搜索(实际也就几天),没有找到合适的方法. 就在绝望的时候,无意间搜到基于HTML5 ...

  10. android 数据存储的几种方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数 ...

随机推荐

  1. Linux命令cURL详解,并实现文件定时上传到ftp服务器的程序

    前言 前段时间群里讨论,想实现某个文件定时上传到服务器要怎么来实现.我记得之前做过 一个项目:为高通的iot模组编写FOTA功能:实现模组可以远程下载升级镜像包,实现版本升级功能.并当时使用的一个超级 ...

  2. Ynoi2016镜中的昆虫

    [Ynoi 2016] 镜中的昆虫 简化题意 给定长为 \(n\) 序列 \(a\) , 两种操作 \(m\) 次: 1 l r x : 将 \([l , r]\) 修改为 \(x\) 2 l r : ...

  3. Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

    众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程 ...

  4. 6.2K star!推荐一款开源混沌工程测试平台:Chaos Mesh

    1.Chaos Mesh 介绍 Chaos Mesh是一个开源的混沌工程平台,旨在帮助用户在生产环境中测试.验证和优化其应用程序的可靠性和稳定性.通过引入故障注入和混沌工程原则,Chaos Mesh可 ...

  5. VMware 安装 OpenWrt

    准备 OpenWrt VMDK 固件映像 你可以直接下载 VMDK 版本的 OpenWrt 固件映像,或者自己构建一个,或者从 IMG 映像文件转换.一般来说 IMG 映像文件较为容易获取,因此下面介 ...

  6. C++ 项目目录结构

    目录结构 project_root/ ├── bin/ # 可执行文件目录 │ ├── my_app # 可执行文件 │ └── ... # 其他可执行文件或脚本 │ ├── build/ # 编译产 ...

  7. Ubuntu 安装 Docker Desktop

    介绍 Docker 有两种版本:Docker Desktop 和 Docker Engine (也称作 Docker CE).Docker Desktop 是带图形界面的版本,非常适合需要在桌面环境中 ...

  8. 小tips:前端容易读错的单词列表

    排名第一的是width,音标/wɪdθ/,发/i/的音,不是发/ai/的音: hidden音标/ˈhɪdn/发/i/的音,不是发/ai/的音: hide音标/haɪd/,发/ai/的音: float音 ...

  9. nacos未授权访问漏洞,导致被网警找

    背景 公司收购了另一家公司,所以相应的后端服务和服务器都交给我管理,但是没有任何的交接文档,大概看了一下代码,依赖的东西就去忙别的了. 直到今天网警突然打电话给我说系统有漏洞(CVE-2021-294 ...

  10. EF Core – Custom Migrations (高级篇)

    前言 会写这篇是因为最近开始大量使用 SQL Server Trigger 来维护冗余 (也不清楚这路对不对). EF Core migrations 没有支持 Trigger Github Issu ...