数据库底层物理存储层 的管理方案

news2024/11/17 23:52:19

专栏内容
postgresql内核源码分析
手写数据库toadb
并发编程
个人主页:我的主页
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

数据库的物理存储层

简介

数据库的数据,在物理介质上的存储,在不同应用场景下采用不同存储方案,大致有内存和磁盘两类。
对于磁盘持久存储方案下,常采用文件的方式,来对应逻辑结构。

物理存储的分类

内存存储

在这种方式下,数据都是在内存,或者高速cache中,它的目的是访问速度非常快,修改频次可以非常高。
但是带来的影响是,数据不会持久化保存,关机数据丢失。

采用内存存储的方式,优点很明显,同样缺点也是很明显。
对于缺点的补充,又采用分布式多副本策略,来提高业务的持续性,同时也能继续保持优点。

单纯采用此类存储方式的数据库,一般都会作为中间层来使用,作为一个数据缓存层,提高并发访问能力,尤其对于高频写入或修改,同时又需要大量查询。
后端又会再接入其它持久化类型的数据库,作为最终数据存储数据库。

磁盘存储

在这种方式,将数据直接写入磁盘,当然会产生大量的IO。
使用此方式的场景通常是

  1. 对于数据可靠性要求非常高,单位数据价值非常高,那么必须实时落盘持久化;

  2. 对于大数据场景,内存存不下海量数据,只能落盘,而且数据实时性要求不高,比如数据统计分析,可以先存下来,再分析;

混合型存储

混合型指即持久化数据,又兼内存型的访问快的优点。大致可以分析两类:

  1. 偏内存型的;数据常驻内存,同时会采用策略写入磁盘,在掉电等故障下,可以从磁盘再次加载数据到内存;

  2. 综合型的;内存中会存储最新数据,采用顺序写磁盘记录redo日志,同时数据也会在不影响访问情况下写到磁盘;此种模型下,内存充当数据缓存区的作用。

文件存储

下面对于物理存储下,文件的组织形式和格式进行分析。
文件管理

  • 每个表对应一个或多个文件,也就是不同的表用不同的文件来存储;
  • 文件类型与逻辑数据库对象有对应管理,比如存储表的文件,存储索引的文件;

文件内容

文件结构

拿表文件来说,文件内容包括类型信息,还有文件内的数据组织信息,以及表的行数据;

  • 文件内容是二进制形式
  • 文件以块为单位进行划分,当然块大小最好与文件系统的块对齐或小于文件系统的单位;
  • 数据块也有不同的类型和内部的组织形式

行存储

page结构

行的删除策略

策略种类

对于删除行后的存储空间管理,大致有三种方面,比如删除第n行

  1. 将n+1… i 移动到 n … i -1 的位置
    这样空闲空间就一直在最后
  2. 将n的位置留下,也一次i+1插入时占用,此种情况需要行的size固定
  3. 将n的位置留下,以后将n+1删除后,使用空闲空间的链表串起来,统一进行整理

利弊比较

  • 第一种策略,行size不需要固定,空间管理简单,对于删除操作,内存拷贝较大;对于插入就非常简单,查找也就容易;
  • 第二种策略,对于行的size就要固定,否则空洞区域很难被利用;当然行size固定后,就有很多限制,同时带来一定空间浪费;
  • 每三种策略,空间管理较复杂,插入和删除比较简单,但是对空闲空间管理,需要额外进行处理,易带来存储的膨胀,对于查询会带来 读/写 IO放大,少量数据的空间需要进行读写;

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【二叉树part04】| 110.平衡二叉树、257.二叉树的所以路径、404.左叶子之和

目录 ✿LeetCode110.平衡二叉树❀ ✿LeetCode257.二叉树的所有路径❀ ✿LeetCode404.左叶子之和❀ ✿LeetCode110.平衡二叉树❀ 链接:110.平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为&…

Redis的数据类型及对应的数据结构(一)

Redis的数据类型和数据结构的对应关系 左边是 Redis 3.0版本的,也就是《Redis 设计与实现》这本书讲解的版本,右边是7.0,注意区别很大 数据类型包括:String、List、Hash、Set、ZSet 对应的底层数据结构入上图 String的应用场景 缓存对象 …

17.API Promise化 miniprogram-api-promise

目录 1 安装 2 配置 3 使用 1 安装 安装之后会在项目路径下出现这个目录,这个目录中又我们之前安装过的npm包 我们删除掉 miniprogram_npm 这个目录 然后点击构建 npm 构建之后就自动变成这样 2 配置 进入 app.js,然后写下面这些东西 3 使用

C++——auto关键字

目录 1. auto简介 2. auto的使用细则 3. auto的实际应用价值 1. auto简介 在早期C/C中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么? C11中&…

安装单机版openGauss

安装单机版openGauss 环境白名单查看ip地址问题解决python版本之间的问题yum指向2.7的编译 安装启动数据库 环境 下载python3.6.8 首先linux中的版本是默认的2.7.5.要下载3.6.8,需要用到wget, openGauss数据库基本操作(超详细) …

MATLAB 之 低层绘图操作和光照及材质处理

这里写目录标题 一、低层绘图操作1. 曲线对象2. 曲面对象3. 文本对象4. 其他核心对象4.1 区域块对象4.2 方框对象 二、光照和材质处理1. 光照处理2. 材质处理2.1 图形对象的反射特性2.2 material 函数 一、低层绘图操作 MATLAB 将曲线、曲面、文本等图形均视为对象&#xff0c…

五、一些经典的网络架构

一、Alexnet 2012年卷积神经网络的开篇鼻祖 但放到现在确实有很多的弊端和有待改进的地方 1,网络基本架构 8层网络,其中有5层卷积,3层全连接 网络层数的定义:主要看有没有参数运算的参与,例如卷积层和全连接就可以…

Xubuntu22.04之安装少儿编程scratch3.3(一百八十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

SPEC CPU 2006 gcc version 8.3.0 (Uos 8.3.0.3-3+rebuild) x86_64 源码编译tools 错误处理笔记

编译tools 拷贝tools到安装目录 cp /mnt/iso/tools /opt/speccpu2006/ -r 执行编译 su rootcd /opt/speccpu2006/tools/src sh -x buildtools 错误 undefined reference to __alloca 编辑./make-3.82/glob/glob.c,注释掉以下宏判断 you should not run config…

「网络编程」第二讲:socket套接字(四 - 完结)_ Linux任务管理与守护进程 | TCP协议通讯流程

「前言」文章是关于网络编程的socket套接字方面的,上一篇是网络编程socket套接字(三),这篇续上篇文章的内容,下面开始讲解! 「归属专栏」网络编程 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先…

linux之用户和用户组

在此之前我们需要先了解用户和用户组的区别 用户是我们可以登录的账号,而用户组是用户的小组,组也可以分为主组和附属组,主组是用户的主要组,附属而是用户的附加组 目录 1.添加新用户账号 2.用户口令的管理 3.用户组命令 1.添加…

被测系统架构与数据流分析

开源项目litemall系统架构(https://github.com/linlinjava/litemall) 角色与数据用户产品前端技术栈后端技术栈数据存储 开源项目Mall的系统架构(https://github.com/macrozheng/mall) 角色与数据用户产品前端技术栈后端技术栈服务治理技术栈监控技术栈大数据处理技术栈数据存…

校园视频AI分析预警系统 TesnorFlow

校园视频AI分析预警系统通过分布式TensorFlow模型训练,校园视频AI分析预警系统对学生的行为进行实时监测,当系统检测到学生出现打架、翻墙、倒地、抽烟等异常行为时,校园视频AI分析预警系统将自动发出警报提示相关人员及时采取措施。深度学习…

Elasticsearch 和数据架构:改进分析和存储的 4 个基本工具

作者:Emily McAlister 组织越来越依赖数据来做出有效的、基于证据的决策来推动业务成果。 无论是评估市场状况和改善客户体验、确保应用程序正常运行时间还是保护组织安全,来自多个来源(包括消费者和内部系统)的数据对于日常运营都…

开源URL短链接服务Shlink

最近一直有人在问,docker 查询注册表失败的问题,目前老苏验证可用的方法有 2 个: 方法一(可用): 看过老苏以前文章的读者都知道,在遇到发布到 ghcr.io 的镜像时,老苏都会推荐用 do…

MacOS Ventura 13.4.1 (22F82) 带 OC 引导双分区黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 13.4.1 更新(内部版本号:22F82),根据Apple的发布说明,该更新提供了重要的安全修复,并建议所有用户进行更新。Apple还为无法运行Ventura的用户发布了macOS 11.7.8和mac…

Git进阶系列 | 5. Rebase vs Merge

Git是最流行的代码版本控制系统,这一系列文章介绍了一些Git的高阶使用方式,从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章,这是第5篇。原文:Rebase vs. Merge: Integrating Changes in Git[1] 大多数开发人员都理解在G…

【五子棋实战】第4章 部署五子棋计算接口到Window、Linux上

【五子棋实战】第4章 部署五子棋计算接口到Window、Linux上 python项目打包成exe可执行文件 ## 步骤一、安装pyinsatller ## 步骤二、使用pyinstaller打包Python程序 ## 操作演示 ## 注意事项!! python的Flask接口部署(Linux) ##…

二叉树-理论基础

文章目录 前言一、二叉搜索树平衡二叉搜索树 二、二叉树的存储方式二叉树的遍历方式二叉树的定义总结 前言 二叉树有两种主要的形式:满二叉树和完全二叉树。满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上…

16.vant Weapp

目录 1 使用npm 2 安装 vant 3 构建npm 4 去除 style:v2 5 使用 vant 6 样式变量 1 使用npm 微信小程序不支持下面三种包 不支持依赖 Node.js 内置库的包不支持依赖 浏览器内置对象 的包不支持依赖 C插件 的包 除去上面三种,能用的包就不多了&#…