当前位置: 首页 > news >正文

mydb:TM实现

一、说明

TM就是事务管理:实现对于事务的新增(active)、事务的状态修改(commit、abort)、事务的状态判断

二、事务管理

2.1创建xid文件/打开xid文件

创建xid、写一个空的 XID 文件头并创建TM

    public static TransactionManagerImpl create(String path) {//创建文件.xidFile f = new File(path+TransactionManagerImpl.XID_SUFFIX);try {if(!f.createNewFile()) {Panic.panic(Error.FileExistsException);}} catch (Exception e) {Panic.panic(e);}if(!f.canRead() || !f.canWrite()) {Panic.panic(Error.FileCannotRWException);}//用于高效地处理文件的读取和写入操作FileChannel fc = null;//任意读文件RandomAccessFile raf = null;try {raf = new RandomAccessFile(f, "rw");fc = raf.getChannel();} catch (FileNotFoundException e) {Panic.panic(e);}// 写空XID文件头ByteBuffer buf = ByteBuffer.wrap(new byte[TransactionManagerImpl.LEN_XID_HEADER_LENGTH]);try {//定位到指定位置fc.position(0);//进行写入fc.write(buf);} catch (IOException e) {Panic.panic(e);}return new TransactionManagerImpl(raf, fc);}

2.2 打开xid文件并创建TM

public static TransactionManagerImpl open(String path) {File f = new File(path+TransactionManagerImpl.XID_SUFFIX);if(!f.exists()) {Panic.panic(Error.FileNotExistsException);}if(!f.canRead() || !f.canWrite()) {Panic.panic(Error.FileCannotRWException);}FileChannel fc = null;RandomAccessFile raf = null;try {raf = new RandomAccessFile(f, "rw");fc = raf.getChannel();} catch (FileNotFoundException e) {Panic.panic(e);}return new TransactionManagerImpl(raf, fc);}

2.2 基于TM进行相关的事务处理

0. 检查文件是否合法 :利用 RandomAccessFile 文件长度 和  new io 的一个类 FileChannel

1、新增事务

新增字节、修改事务总数

2、修改事务状态

通过 updateXID()实现 updateXid是对指定位置写 如果没有直接写 如果有会覆盖

3、事务的状态判断

2.3 注意事项

这里的所有文件操作,在执行后都需要立刻刷入文件中,防止在崩溃后文件丢失数据,fileChannel 的 force() 方法,强制同步缓存内容到文件中,类似于 BIO 中的 flush() 方法。force 方法的参数是一个布尔,表示是否同步文件的元数据(例如最后修改时间等)。

每次写完会try  force() 方法。

相关文章:

mydb:TM实现

一、说明 TM就是事务管理:实现对于事务的新增(active)、事务的状态修改(commit、abort)、事务的状态判断 二、事务管理 2.1创建xid文件/打开xid文件 创建xid、写一个空的 XID 文件头并创建TM public static Transac…...

神经缩放定律:涌现能力与神经元数量、参数数量、数据集大小以及训练所使用的计算量有关

大语言模型的神经缩放定律 大语言模型(LLMs)在自然语言处理领域取得了显著进展,这很大程度上得益于神经缩放定律。该定律指出,模型的损失与模型规模、数据集大小以及训练所使用的计算量呈幂律关系 ,随着模型参数、数据量等的增加,模型会展现出涌现能力,性能会有质的飞跃…...

Microsoft Porject常用字段描述

点击下载《Microsoft Porject常用字段描述》 1. 前言 Microsoft Project 是项目管理中不可或缺的工具,它通过丰富的列(字段)帮助项目经理全面跟踪和管理项目的各个方面。这些列名通常以简称的形式出现,如 ACWP、BCWP、BCWS 等&a…...

web前端开发中vscode常用的快捷键

1.快速复制一行 快捷键: shiftalt 下箭头(上箭头) 或者 ctrlc 然后 ctrlv 2.选定多个相同的单词 快捷键: ctrl d 先双击选定一个单词,然后按下 ctrl d 可以往下依次选择相同的单词。 这样同时修改相同的单词 3.全局替换某单词 当我们一个…...

鲲鹏(ARM64)升级GCC

1、下载压缩包 wget http://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.xz2、解压 tar -xvf gcc-9.5.0.tar.xzcd gcc-9.5.03、下载关联软件 ./contrib/download_prerequisites4、新建文件夹 mkdir build && cd build5、配置 ../configure -enable-checkingrelea…...

国产操作系统安装DeepSeek

从年前到现在,DeepSeek这款语言AI模型,一经发布直接在全球爆火,在热搜上更是牢牢占据一席之地。无论是技术大神,还是紧跟潮流的技术小白,都被它强大的自然语言处理能力所吸引。作为国产操作系统的用户,千万…...

安科瑞 Acrel-2000ES:解锁储能管理新高度,引领能源未来!

安科瑞 崔丽洁 在能源转型的关键时期,高效的储能管理成为众多企业和项目的核心需求。今天,就给大家介绍一款储能管理的 “神器”—— 安科瑞 Acrel-2000ES 储能能量管理系统。 安科瑞电气可是行业内的 “明星企业”,2003 年成立,2…...

DeepSeek总是提示“服务器繁忙,请稍后再试。”的问题的解决办法(替代网站推荐)

文章目录 问题现象原因分析替代网站的可行性分析替代网站秘塔搜索超算互联网360 纳米AI助手百度云千帆字节跳动火山引擎阿里云PAI硅基流动其他文思助手Fireworks英伟达POE 问题现象 频繁遇到错误提示: 在使用DeepSeek时(开启“深度思考(R1&a…...

OpenBayes 教程上新 | 告别服务器繁忙,DeepSeek 一键部署教程上线!

近日,DeepSeek 的技术突破如同一颗横空出世的「科技烟花」,在全球范围内瞬间炸开。 日活跃用户数在短短 18 天内便突破 1500 万,增速达到 ChatGPT 的 13 倍。根据 SensorTower 数据显示,DeepSeek 应用的每日下载量接近 500 万&am…...

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(四级)

青少年软件编程(Python)等级考试试卷(四级) 一、单选题(共25题,共60分) 1.以下有关位置实参和关键字实参的表述中,错误的选项是?(C) A.位置实参和关键字实参可以混用。 B. 形参不占用内存地址。 C.调用函…...

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 完整代码私信回复三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 一、引言 1、研究背景和意义 在现代数据科学领域,时间序列…...

日常知识点之面试后反思裸写string类

1:实现一个字符串类。 简单汇总 最简单的方案,使用一个字符串指针,以及实际字符串长度即可。 参考stl的实现,为了提升string的性能,实际上单纯的字符串指针和实际长度是不够了,如上,有优化方案…...

(2025)深度分析DeepSeek-R1开源的6种蒸馏模型之间的逻辑处理和编写代码能力区别以及配置要求,并与ChatGPT进行对比(附本地部署教程)

(2025)通过Ollama光速部署本地DeepSeek-R1模型(支持Windows10/11)_deepseek猫娘咒语-CSDN博客文章浏览阅读1k次,点赞19次,收藏9次。通过Ollama光速部署本地DeepSeek-R1(支持Windows10/11)_deepseek猫娘咒语https://blog.csdn.net/m0_70478643/article/de…...

zyNo.22

常见Web漏洞解析 命令执行漏洞 1.Bash与CMD常用命令 (1)Bash 读取文件:最常见的命令cat flag 在 Bash 中,cat 以及的tac、nl、more、head、less、tail、od、pr 均为文件读取相关命令,它们的区别如下: …...

博客项目-day05(首页导航栏功能补全)

导航 其实之前已经实现过文章和标签分类了 但是这个对应的是导航栏的,多显示个图片 所以新增两个这个请求 文章分类 把之前的CategoryVo加个描述属性 写过这个copyList,直接用就行 标签分类 和上面的分类查询差不多 不多解释了 分类文章列表 点击这个后…...

防御保护-----前言

HCIE安全防御 前言 计算机病毒 ​ 蠕虫病毒----->具备蠕虫特性的病毒:1,繁殖性特别强(自我繁殖);2,具备破坏性 蠕虫病毒是一种常见的计算机病毒,其名称来源于它的传播方式类似于自然界中…...

力扣刷题(数组篇)

日期类 #pragma once#include <iostream> #include <assert.h> using namespace std;class Date { public:// 构造会频繁调用&#xff0c;所以直接放在类里面&#xff08;类里面的成员函数默认为内联&#xff09;Date(int year 1, int month 1, int day 1)//构…...

初一说明文:我的护眼灯

本文转自&#xff1a;AI范文助手网 原文链接&#xff1a;https://www.aazhushou.com/czzw/5023.html 自爱迪生发明了灯以来&#xff0c;各种各样的灯相继问世了&#xff0c;给人一种新景象&#xff0c;其中护眼灯也问世了。 我有一盏台灯叫麦迪格护眼灯。那天我和母亲去商场&…...

【论文阅读】Revisiting the Assumption of Latent Separability for Backdoor Defenses

https://github.com/Unispac/Circumventing-Backdoor-Defenses 摘要和介绍 在各种后门毒化攻击中&#xff0c;来自目标类别的毒化样本和干净样本通常在潜在空间中形成两个分离的簇。 这种潜在的分离性非常普遍&#xff0c;甚至在防御研究中成为了一种默认假设&#xff0c;我…...

八一南昌起义纪念塔手绘图纸:一部凝固的工程史诗

在南昌美术馆的玻璃展柜中&#xff0c;泛黄的八一南昌起义纪念塔手绘图纸正无声述说着一段工程奇迹。这些诞生于上世纪七十年代的图纸&#xff0c;以0.05毫米的针管笔触勾勒出总高53.6米的纪念碑&#xff0c;在硫酸纸上构建的坐标网格精确到毫米级&#xff0c;每一根结构线都暗…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...