数据库课程 CMU15-445 2023 Fall Project-1 Buffer Pool Manager

0 实验结果

在这里插入图片描述

1 任务总结

本章按照任务书,需要完成

  1. LRU-K替换策略
  2. 磁盘调度器——后台线程接收请求,处理数据的读/写。
  3. 缓冲池管理——使用上面完成的功能,来对抽象的页操作。
1.1 LRU-K替换策略

每个函数的说明都很清楚,按照指示来写即可。
主要说明一些坑点

1.1.1 变量及其作用

时间戳这里要提一下,因为RecordAccess的访问很频繁,时间很短,获取真实的时间戳作用不大。
所以可以每RecordAccess一次,就递增当前的时间戳,计算 K距离时,通过当前时间戳和从当前开始向前数第K次的作差。

// 可以被淘汰置换出的帧数量
size_t curr_size_{0};
// 当前的时间戳
size_t current_timestamp_{0};
1.1.2 坑点

需要明确LRU-K算法,这里算法有点特殊
1.1.2.1 当一个帧访问次数不到K次时,K-距离都是INF,此时比较的是帧最早访问(即第一次)的时间,时间越早,越先被淘汰。
举个例子:当K=3时,此时因为帧1和帧2都没有访问到3次,而帧1最早访问,所以淘汰帧1。

frame_idtime_stamp
10
21
12
1.2 磁盘调度器

实现简单,没有坑点,过~

1.3 缓冲池管理

一开始对list,map,page分别上锁,测试无法通过,后改为使用大颗粒锁(即函数从头到尾锁定)。

1.3.1 NewPage

创建新的页面之后,先使用RecordAccess创建节点,再SetEvictable将其设置为Pin。
修改page的元数据,包括:
page_id_pin_count_is_dirty_ 等元数据

1.3.2 FetchPage

获取页面的时候,如果缓冲池中本来就存在,则pin_count_ 需要+1,如果是通过淘汰其他页面得到的,pin_count_ 需要重置为1。

1.3.3 UnpinPage

传入此函数的is_dirty使用注意:
只有当页面不脏时,需要设置此位为传入的参数。
并且多线程环境下 一定要 每次都执行判断is_dirty并赋值操作。

我在这里遇到的问题,就是它导致的。

[ 2.75] get 2: total_cnt=648 throughput=251.583 avg_throughput=235.808
page seed not consistent: seed_=0 seed=1

2 知识总结

2.1 std::list

一个双向链表容器
尾插入:push_back
头插入: push_front
删除元素:

pop_back
pop_front
erase

获取元素:

front()
back()

2.2 std::optional

表示一个可能存在也可能不存在的值,作用是:使用std::nullopt,避免使用 nullptr 或特殊值(如 -10)来表示“无值”的情况。
方法:

emplace

2.3 std::promise

并发编程中传递值或异常.
可以与 std::future 一起使用,以实现异步操作.
std::promise 可以存储任何类型的值.
std::future::get() 是一个阻塞调用,它会一直等待,直到 std::promise 设置了值或异常.

2.4 std::unordered_map

std::map 是一个有序的关联容器,基于红黑树(一种自平衡二叉搜索树)实现,
平均时间复杂度为 O(log n)。
由于红黑树的结构,内存占用相对较高。

std::unordered_map 是一个无序的关联容器,基于哈希表实现。
平均时间复杂度为 O(1),最坏情况下为 O(n),内存占用相对较低。

std::unordered_map的赋值

std::unordered_map<int,complex_type>data_src;1. 赋值运算符拷贝
std::unordered_map<int,complex_type>data_src_copy = data_src;
2. 拷贝构造函数
std::unordered_map<int,complex_type>data_src_copy(data_src);

键和值 都会被拷贝到新的 std::unordered_map 容器中,如果是指针类型,仅复制指针地址。

	complex_type& operator=(const complex_type& that){std::cout << "赋值重载" << std::endl;this->age = that.age;this->name = that.name;return *this;}// 结果============有参构造函数拷贝构造函数============有参构造函数默认构造函数赋值重载============拷贝构造函数拷贝构造函数============赋值重载赋值重载============有参构造函数赋值重载============syh dd// 代码std::unordered_map<int,complex_type>data_src;std::cout << "============" << std::endl;data_src.emplace(1,complex_type(10, "syh"));std::cout << "============" << std::endl;data_src[2] = complex_type(20,"mike");std::cout << "============" << std::endl;std::unordered_map<int,complex_type>data_src_copy(data_src);// 因为有两个值,所以发生了两次拷贝std::cout << "============" << std::endl;data_src_copy = data_src;std::cout << "============" << std::endl;data_src_copy[1] = complex_type(57,"dd");std::cout << "============" << std::endl;std::cout << data_src[1].name<<" " << data_src_copy[1].name << std::endl;

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

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

相关文章

【python计算机视觉编程——9.图像分割】

python计算机视觉编程——9.图像分割 9.图像分割9.1 图割安装Graphviz下一步&#xff1a;正文9.1.1 从图像创建图9.1.2 用户交互式分割 9.2 利用聚类进行分割9.3 变分法 9.图像分割 9.1 图割 可以选择不装Graphviz&#xff0c;因为原本觉得是要用&#xff0c;后面发现好像用不…

齐活儿了:一文读懂ERP和MRP、MES、CRM、WMS、SRM、APS等系统

ERP&#xff0c;即企业资源计划系统&#xff0c;是驱动企业资源整合与高效管理的核心引擎。它覆盖了企业财务、人力资源、研发创新、生产制造、供应链管理、采购活动、销售市场、客户服务以及资产管理这九大核心业务领域&#xff0c;形成了一个全方位、多层次的企业价值链管理体…

初学者指南:如何在Windows 11中自定义任务栏颜色,全面解析!

Windows任务栏如何修改颜色&#xff1f;任务栏可以说是电脑桌面上比较不“起眼”的东西&#xff0c;但是也有不少小伙伴会想要将自己的电脑任务栏设置得好看&#xff0c;比如说修改电脑任务栏透明度&#xff0c;以及修改任务栏颜色。 电脑任务栏设置可以修改任务栏颜色&#xf…

27 顺序表 · 链表

目录 一、单链表 &#xff08;一&#xff09;概念 1、节点 2、链表的性质 &#xff08;二&#xff09;单链表的实现 &#xff08;三&#xff09;单链表算法题 1、移除链表元素 2、反转链表 3、链表的中间节点 4、合并两个有序的单链表 5、链表分割 6、链表的回文结构…

软件设计师容易考吗?

一、软考软件设计师难吗 软考软件设计师考试对于不同的人来说&#xff0c;难度可能有所差异。然而&#xff0c;总体来说&#xff0c;软考软件设计师考试是相对较难的考试&#xff0c;需要考生具备扎实的软件设计理论知识和实践经验。 从各地2024年上半年软考合格人数的公布情…

Autosar模式管理实战系列-COMM模块状态机及重要函数讲解

1.Channel状态管理 上一节提到ComM进行通信模式管理提供有两大状态机,另外一个就是Channel状态管理。这里的Channel指的是一个通信总线,目前项目主要是采用CAN总线。ComM 模块对每一个Channel都定义了一个状态机,用于描述通道的各种状态、状态转移关系和状态转移动作。该状…

Blender插件200个分享

Blender不仅开源免费&#xff0c;插件资源也相当丰富&#xff0c;今天我们一起来看看blender软件的插件&#xff0c;其中群友给我整理提供了200多个&#xff0c;可供各位大佬享用&#xff01; PS&#xff1a;回“渲染101农场云渲码6666”&#xff0c;领取&#xff0c;大家懂滴…

roctracer 的应用示例

1&#xff0c;不用 roctracer 的普通场景 mt.cpp /* Copyright (c) 2018-2022 Advanced Micro Devices, Inc.Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software")…

✨机器学习笔记(四)—— 逻辑回归、决策边界、过拟合、正则化

Course1-Week3: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week3机器学习笔记&#xff08;四&#xff09; 1️⃣逻辑回归&#xff08;logistic regression&#xff09;…

element-plus表单使用show-overflow-tooltip,避免占满屏幕,需要设置宽度

在表单中&#xff0c;<el-table-clumn>中添加show-overflow-tooltip&#xff0c;可以实现表格内容过多的问题。 属性官方解释&#xff1a;是否隐藏额外内容并在单元格悬停时使用 Tooltip 显示它们。 出现的问题&#xff1a; 使用了该属性之后&#xff0c;弹出的详细内…

反射动态代理

1. 反射 1.1 反射的概述&#xff1a; **专业的解释&#xff08;了解一下&#xff09;&#xff1a;**是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意属性和方法&#xff…

【Linux实践】实验二:LINUX操作基础

【Linux实践】实验二&#xff1a;LINUX操作基础 实验目的实验内容实验步骤及结果1. 打开终端2. 关闭计算机命令3. 查看帮助文档4. 修改计算机主机名5. 显示月历和时间6. 统计行数、字符数、单词数 这章开始要涉及到命令了&#xff0c;其他关于命令的内容可以看我 2021年写的笔记…

非金属失效与典型案例分析培训

随着生产和科学技术的发展&#xff0c;人们不断对高分子材料提出各种各样的新要求。因为技术的全新要求和产品的高要求化&#xff0c;而客户对产品的高要求及工艺理解不一&#xff0c;于是高分子材料断裂、开裂、腐蚀、变色等之类失效频繁出现&#xff0c;常引起供应商与用户间…

无人机几种常见的避障系统!!!

1. 视觉避障系统 工作原理&#xff1a; 视觉避障系统通过安装在无人机上的摄像头捕捉周围环境的图像&#xff0c;利用计算机视觉技术对图像进行处理和分析&#xff0c;提取出障碍物的信息。 通过对障碍物的识别和分类&#xff0c;无人机可以判断出障碍物的性质和危险程度&am…

人工智能+数字孪生技术在智慧型项目中的应用研究(Word原件)

1 基于BIM的智慧社区运维管理信息系统构建 1.1 数据存储 1.2 数据交换 1.3 BIM模型的数据整合及轻量化 1.运维BIM模型 2.BIM模型的数据整合 3.BIM模型的轻量化处理 2 GIS与BIM融合数字孪生技术应用 2.1 BIM模型在实景三维GIS平台上分析 2.2 BIM与GIS数据交互 …

汽车租赁系统1.0版本

汽车租赁系统1.0版本比较简陋&#xff0c;以后还会有2.0、3.0……就像《我爱发明》里面的一代机器二代机器&#xff0c;三代机器一样&#xff0c;是一个迭代更新的过程&#xff08;最近比较忙&#xff0c;可能会很久&#xff09;&#xff0c;这个1.0版本很简陋&#xff0c;也请…

电阻、电容、电感的封装大小分别与什么参数有关?

电阻封装大小与电阻值、额定功率有关&#xff1b; 电容封装大小与电容值、额定电压有关&#xff1b; 电感封装大小与电感量、额定电流有关。

7. qml按键最优解

目录 qml自带按键状态按键长按按键延时按键防抖按键 qml自带按键 官网列出了他扩展的按键派生与AbstractButton Button CheckBox DelayButton ltemDelegate MenuBarltem Menultem RadioButton switch TabButton 一般开发的过程中根据业务的不同进行选择 AbstractButton 状态按…

Linux云计算 |【第三阶段】PROJECT1-DAY3

主要内容&#xff1a; Keepalived高可用、部署Ceph分布式存储 一、网站架构进阶项目案例 案例1&#xff1a;Keepalived高可用 延续 PROJECT1-DAY2 案例&#xff0c;部署两台代理服务器&#xff0c;实现如下效果&#xff1a; 1&#xff09;利用keepalived实现两台代理服务器的…

测试通用面试题大全

24年软件测试的发展如何&#xff1f; 1、IT行业还会继续升温&#xff0c;高质量人才需求相对还是短缺。 2、要求变高之后&#xff0c;很难再下降了&#xff0c;学历和经验。 3、功能测试之外的东西&#xff0c;接口、性能和自动化要掌握一点。 4、长远来看&#xff0c;软件…