当前位置: 首页 > 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() 方法。

http://www.lryc.cn/news/535446.html

相关文章:

  • 神经缩放定律:涌现能力与神经元数量、参数数量、数据集大小以及训练所使用的计算量有关
  • Microsoft Porject常用字段描述
  • web前端开发中vscode常用的快捷键
  • 鲲鹏(ARM64)升级GCC
  • 国产操作系统安装DeepSeek
  • 安科瑞 Acrel-2000ES:解锁储能管理新高度,引领能源未来!
  • DeepSeek总是提示“服务器繁忙,请稍后再试。”的问题的解决办法(替代网站推荐)
  • OpenBayes 教程上新 | 告别服务器繁忙,DeepSeek 一键部署教程上线!
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(四级)
  • 三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)
  • 日常知识点之面试后反思裸写string类
  • (2025)深度分析DeepSeek-R1开源的6种蒸馏模型之间的逻辑处理和编写代码能力区别以及配置要求,并与ChatGPT进行对比(附本地部署教程)
  • zyNo.22
  • 博客项目-day05(首页导航栏功能补全)
  • 防御保护-----前言
  • 力扣刷题(数组篇)
  • 初一说明文:我的护眼灯
  • 【论文阅读】Revisiting the Assumption of Latent Separability for Backdoor Defenses
  • 八一南昌起义纪念塔手绘图纸:一部凝固的工程史诗
  • [hgame 2025 ]week1 pwn/crypto
  • python 获取smpl身高 fbx身高
  • 实战教程:如何利用DeepSeek结合深度学习与NLP技术实现跨模态搜索与个性化推荐
  • 计算机毕业设计Python+卷积神经网络租房推荐系统 租房大屏可视化 租房爬虫 hadoop spark 58同城租房爬虫 房源推荐系统
  • 目标检测模型性能评估:mAP50、mAP50-95、Precision 和 Recall 及测试集质量的重要性
  • AnyPlace:学习机器人操作的泛化目标放置
  • 2025icpc(Ⅱ)网络赛补题 GL
  • 51c大模型~合集112
  • Rust 文件读取:实现我们的 “迷你 grep”
  • 【Unity3D】Jenkins Pipeline流水线自动构建Apk
  • 信息收集-Web应用备案产权Whois反查域名枚举DNS记录证书特征相似查询