【数据库】缓冲区管理器结构,几种常用替换策略分析,pin钉住缓冲区块防止错误的替换,以及缓冲区管理带来的代价优化

news2024/11/28 14:34:44

缓冲区管理

专栏内容

  • 手写数据库toadb
    本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
    本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

    • 缓冲区管理
  • 前言
  • 概述
  • 缓冲区管理结构
  • 缓冲区管理策略
  • 缓冲区管理与查询执行的关系
  • 总结
  • 结尾

在这里插入图片描述

前言

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。

数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中,数据量呈指数级增长,如何高效地处理和管理这些数据成为一个重要的问题。同时,随着云计算、物联网、大数据等新兴技术的不断发展,数据库理论的重要性日益凸显。

因此,本专栏的分享希望可以提高大家对数据库理论的认识和理解,对于感兴趣的朋友带来帮助。

概述

为了更快的查询,我们操作的数据都是加载到缓冲区中,为了更好的得到缓冲区,尽可能的缩小得到缓冲区的延迟,减少不可能满足要求的情况,就需要缓冲区管理器。

本文主要分享缓冲区管理的策略,以及缓冲区管理器的作用。

缓冲区管理结构

数据库的执行模块一般都直接与缓冲区交互,而当需要的数据不在缓冲区时,由缓冲区和磁盘之间交互,加载对应的数据。

一般有两种缓冲区管理结构:

  1. 在大多数关系型DBMS中,缓冲区管理器直接控制内存;
  2. 缓冲区管理器在虚拟内存中分配缓冲区,允许操作系统来决定缓冲区在何时真正在内存中,以及那些缓冲区在操作系统管理的磁盘的swap空间中。许多内存型数据库和面向对象的数据库会按这种方式操作。

不管使用那种结构,都会引起同样的问题 :缓冲区管理器应当限制使用缓冲区的数量,使得它们能够适合内存的容量。

当采用缓冲区管理器直接管理内存的结构时,请求的缓冲区数量,超过了可得到的空间时,就不得不通过将缓冲区的内容刷到磁盘上,来清理一部分缓冲区。

而当使用虚拟内存方式时,可得到的空间会超过真正的内存容量,如果缓冲区超过物理内存容量时,操作系统就会将多块内存在磁盘swap区移进移出,使性能出现波动,系统也会花费大量时间来作交换。

缓冲区管理策略

为了避免缓冲区超过可用上限,带来严重的波动,缓冲区管理器必须给出缓冲区的一个合理使用上限,而到达这一上限之后,需要采用一定策略来保证我们可用的缓冲区请求不被延迟。

这正如大家所熟悉的操作系统的内存调度替换策略,一般有以下几种:

  • 最近最少使用 LRU

LRU策略是替换出最长时间没有读或写过的块;这种方法要求缓冲区管理器维护一张表,来记记录每个缓冲区被最后访问的时间,每次访问都需要生成或更新这个表项,有一定的维护工作量。但是LRU是一个有效的策略。

  • 先进先出 FIFO

在FIFO策略中,当需要一个缓冲区时,需要清空占用时间最长的那个缓冲区,并用来装入请求的数据块。在这种方法中,缓冲区管理器同样也要记录一张表,来记录每个缓冲区的访问时间,当新缓冲区时才会生成表项,再次访问并不会更新表项。

相比LRU,FIFO更少的维护成本,但是它会造成更多的错误,使用最频繁的块反而会被替换出去,又很快又被加载。

  • “时钟”算法

这个算法,可以看成是LRU算法的一种实现,它更有效。将缓冲区看作一个环,一个遍历指示器指向缓冲区中的一个,如果想找到一个可用缓冲区,指示器就按顺时针旋转查找。

每个缓冲区有一个标记,它可以是0或1,当标志为0时,就可以被选中,替换当前缓冲区的内容到磁盘上,同时加载新请求的数据块到缓冲区中,并置为1;如果指示器遇到的缓冲区标记为1,就将它减为0,这样在下一次循环到时,就可以选择;

同样的,当缓冲区被访问时,也会将标记设置为1,这样说明最近被使用过,减少替换的概率。

指示器查找时,直到找到缓冲区标记为0的缓冲区为直,最多会查找第二遍就可以找到。

当然这个标志的取值,可以用更大的数字,意味着指示器在缓冲区上限较小时,需要循环更多遍。

  • 系统控制

查询执行器或者其它数据库模块,可以给缓冲区管理器一些建议,避免像LRU,FIFO,时钟”算法等这些严格的策略引起错误。

比如“钉住”某一缓冲区块,暂时绕过策略控制,比如之前博客提到的一趟算法中,正在一条接一条元组扫描时,这个数据块就不能被替换出去。还有对于正在用到的B树索引的根数据块,它是非常频繁被访问的。

这样可以保持该缓冲区一直在内存中,等到使用完成时,解除就可以使用策略进行替换。

缓冲区管理与查询执行的关系

当执行时,需要得到M个缓冲区时,缓冲区管理器能够保证它得到足够的缓冲区吗?

在缓冲区管理器设计时需要考虑两个问题 :

  • 替换算法能够适应得到的缓冲区数目M的变化;
  • 缓冲区替换给执行带来的额外磁盘I/O数量;

这就需要缓中区管理和执行算法都有一定的适应性;对于第二个问题,需要缓冲区管理器,在占用一定缓冲区后,就要进行提前清理缓冲区,减少需求时的等待代价。

总结

通过对于缓中区管理器的了解,可以看到它的实现策略也是我们熟悉的几种算法,当然会存在一些在实践中的问题,需要在使用时注意。

最后分享一段helloworld的代码

#include <stdio.h>

void hello(void) {
    printf("Hello, World!\n");
}

int main(void) {
    void (*func_ptr)(void) = hello;
    (*func_ptr)();
    return 0;
}

在这个例子中,我们定义了一个名为 hello 的函数,它输出 “Hello, World!”。然后,在 main 函数中,我们定义了一个名为 func_ptr 的函数指针,并将其指向 hello 函数。最后,我们通过 (*func_ptr)() 来调用 hello 函数。注意,在使用函数指针时,我们需要使用 (*func_ptr) 来调用函数。

结尾

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

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

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

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

相关文章

【Qt】判断QList链表内是否有重复数据

QList<int> listInt;listInt.push_back(1);listInt.push_back(1);listInt.push_back(2);listInt.push_back(3);qDebug().noquote() << listInt.toSet().toList();

(数据结构)顺序表的定义

#include<stdio.h> //顺序表的实现——静态分配 #define MAX 10 //定义最大长度 typedef struct List {int data[MAX]; //用静态的数组存放数据int lenth; //顺序表现在的长度 }List; //顺序表的初始化 void ChuShiHua(List L) {L.lenth 0; //将顺序表的长度初始化…

MFC居中显示文字及其应用

首先获取窗口客户区矩形,然后使用DrawText输出,设置DT_CENTER 和 DT_VCENTER标志; 输出如上图;没有实现垂直居中; 最终的代码如下; void CcenterView::OnDraw(CDC* pDC) {CcenterDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为…

基于python协同过滤推荐算法的电影推荐与管理系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 电影推荐与管理系统是一个基于Python的协同过滤推荐算法的应用&#xff0c;它可以帮助用户根据他们的兴趣和偏好进行…

一般将来时

一般将来时 概念 表示将要发生的动作或打算、计划准备做某事 时间 tomorrow 明天 the day after tomorrow 后天 next week 下周 next weekend 下周末 next month 下个月 next year 明年 ...句子结构 主语 be&#xff08;am/is/are&#xff09;going to do … 计划,…

手把手教会你--Hack The Box的账号注册(HTB Labs部分)

有什么问题&#xff0c;请尽情问博主&#xff0c;QQ群796141573 前言1.1 一次注册正确的注册过程1.2 讲讲我在注册过程中遇到的两个问题&#xff08;1&#xff09;点击REGISTER后无反应&#xff08;2&#xff09;提示Error! reCaptcha validation failed 前言 请务必跟着博主复…

GPT4测试 — 答题能力及文档处理能力

创建gdp.txt文件&#xff08;使用word 2013创建的文档测试了也可以&#xff0c;WPS建的不行&#xff09; 上传文件&#xff0c;输入prompt: 请帮我答题&#xff0c;把那个正确答案的选项的字母序号填在&#xff08;&#xff09;中&#xff0c;并返回文件blabla… 给我一个文件…

人工智能-优化算法和深度学习

优化和深度学习 对于深度学习问题&#xff0c;我们通常会先定义损失函数。一旦我们有了损失函数&#xff0c;我们就可以使用优化算法来尝试最小化损失。在优化中&#xff0c;损失函数通常被称为优化问题的目标函数。按照传统惯例&#xff0c;大多数优化算法都关注的是最小化。…

springboot核心原理之@SpringbootApplication

1.SpringbootApplication Configuration标志的类 在spring ioc启动的时候就会加载创建这个类对象 EnableAutoConfiguration 中有两个注解 &#xff08;1&#xff09;AutoConfigurationPackage 扫描主程序包(主程序main所在包及其子包) 可以看到这个类 &#xff1a; static c…

Echarts title标题配置项的使用 更改颜色 副标题

title配置项主要是对图表的标题进行配置 title配置项所有属性文档 title&#xff1a; { ...... }设置标题 副标题 text: 简单创建柱形图,//图表标题 subtext: 副标题,如果想对副标题设置 超链接 边框 颜色 宽度…等 比如&#xff1a;设置超链接 sublink:‘…’, 设置标题位置…

Android 虚拟机与类加载机制

1、Dalvik 虚拟机 Android 应用程序运行在 Dalvik/Art 虚拟机上&#xff0c;并且每一个应用程序都有一个单独的 Dalvik/Art 虚拟机实例。 1.1 JVM 与 Dalvik Dalvik 虚拟机也算是一个 Java 虚拟机&#xff0c;它是按照 JVM 虚拟机规范实现的&#xff0c;二者的特性差不多&am…

11【保姆级】-GO语言的struct

11【保姆级】-GO语言的struct 一、Go的面向对象1.1 说明 二、结构体2.1 结构体和结构体变量(实例)的区别和联系2.2 声明结构体 和 细节说明2.3 结构体在内存中的布局2.4 创建结构体和访问结构体的四种方式 在学习GO语言时&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节…

王者荣耀小游戏

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt; package com.sxt;import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.…

linux复习笔记04(小滴课堂)

软件安装rpm方式介绍&#xff1a; 先去挂载光盘&#xff1a; 要确保这是已连接状态。 我们查看到已经挂载成功了。 进到这个目录下。 我们可以看到这有很多rpm软件包。 man rpm: 可以看到很多参数&#xff0c;但是我们不需要全部掌握。 举例&#xff1a; 这就是告诉我们需要安…

BC77 简单计算器(牛客)

#include <stdio.h> int main() {double a, b, d;//用来接收浮点数char c;//用来接受符号scanf("%lf %c %lf", &a, &c, &b);if (c || c - || c * || c /)//判断输入的运算符号不包括在&#xff08;、-、*、/&#xff09;范围内{switch (c)//根…

Ps:使用钢笔工具绘制自由路径的技巧

只有熟练掌握使用钢笔工具绘制自由路径的技巧&#xff0c;才能快速完成复杂形状的创建以及精准抠图等工作。 钢笔工具是 Photoshop 中绘制路径的主要工具。无论是直线路径还是曲线路径&#xff0c;钢笔工具都能够提供高度的控制和精确度。 ◆ ◆ ◆ 绘制直线路径 绘制直线路径…

4. 标准 IO 库

4. 标准 IO 库 1. 标准 IO 简介2. FILE 指针3. 标准输入、标准输出和标准错误4. fopen() 和 flose()5. fread() 和 fwrite()6. fseek 定位7. 检查或复位状态7.1 feof()7.2 ferrof()7.3 clearerr() 8. 格式化 IO8.1 格式化输出8. 2 格式化输入 9. IO 缓冲9.1 文件 IO 的内核缓冲…

【古诗生成AI实战】之五——加载模型进行古诗生成

回顾上一篇博客&#xff0c;我们已经成功地训练了我们的模型&#xff0c;并将其保存下来。这是一个重要的里程碑&#xff0c;因为训练好的模型是我们进行文本生成的基础。 现在&#xff0c;接下来的步骤是加载这个训练好的模型&#xff0c;然后使用它来生成古诗。 本章的内容属…

AI4S Cup学习赛-中枢神经系统药物研发:药物筛选与优化

赛题介绍 链接&#xff1a;Bohrium 案例广场 (dp.tech) 中枢神经系统类疾病长期以来存在着重要的临床未满足需求。据统计&#xff0c;在当前人口老龄化趋势下&#xff0c;阿兹海默&#xff08;AD&#xff09;、帕金森病&#xff08;PD&#xff09;等神经退行性疾病和脑癌、中…

ATK-ESP8266 WIFI模块串口通信通用实现方案

ATK-ESP8266 WIFI模块是一种常用的无线模块&#xff0c;它可以通过串口与外部设备进行通信&#xff0c;实现数据的收发和控制。本文将介绍一种通用的实现方案&#xff0c;帮助您在项目中使用ATK-ESP8266 WIFI模块进行串口通信。 【方案概述】 这个通用实现方案涵盖了ATK-ESP82…