avatar
文章
84
标签
36
分类
29
主页
归档
标签
分类
关于我
flyingzc's blog
主页
归档
标签
分类
关于我

flyingzc's blog

H2 Database 事务 Rollback 流程实现原理
发表于2024-10-16|H2
H2 Database 事务 Rollback 流程实现原理使用1234567Connection conn = getConnection();// 开启事务conn.setAutoCommit(false);// 执行 SQLexecuteWithLog(conn, "insert into Test(id, name) values(1, 'name1'), (2, 'name2')");// 回滚事务conn.rollback(); 功能模块类总体流程当执行事务回滚时,会获取当前事务所有的 undoLogId,然后从后向前遍历每一个 undoLogId。对于每一个 undoLogId,先遍历 undoLog btree 找到存储的 Record。Record 信息里包含了当前 undoLogId 操作的数据行信息。然后根据 Record 信息找到对应记录的 primary key btree,根据主键 id 找到对应行记录进行回滚操作。当记录回滚完之后,再回滚 undoLog btree 上的 undoLog...
H2 Database MVStore Commit 流程
发表于2024-10-15|H2
H2 Database MVStore Commit 流程作用BackgroundWriterThread 按照固定频率,将内存里修改的尚未保存的 Page 信息持久化到存储。 流程启动阶段创建后台线程org.h2.mvstore.MVStore#setAutoCommitDelay1.创建 BackgroundWriterThread 后台线程2.创建序列化线程 serializationExecutor3.创建持久化线程 bufferSaveExecutor设置自动提交更改的最大延迟(单位毫秒)。 默认值为 1000,这意味着所有更改最多在一秒后提交。 要禁用自动提交,需要将值设置为 0。在这种情况下,仅在显式调用 commit 时才会提交更改。 BackgroundWriterThread 线程逻辑定时任务周期性执行,比对内存里的 MVMap...
H2 Database MvMap 插入数据流程
发表于2024-10-12|H2
H2 Database MvMap 插入数据流程H2Database 使用 MVStore 作为默认的存储子系统,支持多版本,持久化的键值存储。其中每一个 MVMap 对象代表了一颗 btree。MVMap 里包含了 btree 根页面的引用,这颗 btree 可以表示一张表、一个索引,或者用来记录 undo log 等。 使用12345678// 1.根据数据库文件名称打开 mvStoreMVStore s = MVStore.open(fileName);// 2.指定名称创建 mvMapMVMap<Integer, String> map = s.openMap("data");// 3.将数据插入到 mvMap 上for (int i = 0; i < 400; i++) { map.put(i, "Hello-" + i);} 相关类MVMap 类成员变量包含了 MVMap 这个 btree 的唯一 id,btree 的根节点引用。btree 每个节点上存储的 key、value...
H2 Database 事务 Commit 流程实现原理
发表于2024-09-28|H2
H2 Database 事务 Commit 流程实现原理使用测试 Demo: 123begin;insert into test values(1);commit; 功能模块类总体流程1234567891011121314解析 commit 语句执行 commit 语句 设置事务状态为已提交 根据 undoLogId 判断事务是否有更改操作,有更改继续提交 CAS 设置当前事务状态为已提交到 committingTransactions 遍历 undoLog mvMap 追加标记 undoLog 已提交到 undoLog mvMap 上 获取当前 undoLog 操作涉及的 mvMap id 遍历到对应 Page 的对应 index 将 VersionedValueUncommitted 类型更新成 DefaultRow 类型事务清理操作 清理 undoLog mvMap(更新 root 节点为 empty) 清理事务状态 释放 table...
H2 Database SQL 插入流程
发表于2024-09-03|H2
H2Database SQL 插入流程插入数据时会先进行 SQL 解析,然后找到插入表对应的 Primary Index 对应的 BTree,然后根据二分法定位到插入的叶子节点,将 key(主键) 和 value(Row) 插入到指定的叶子节点. 12345678910111213141516171819202122232425262728293031解析 SQLsession 加锁创建 savepoint 获取or创建事务设置 savepoint执行 insert 插入操作 表权限校验 创建模板行 从 insert values 表达式获取值,设置到当前 row 里 将 value 转换成指定类型 table 加 share 锁 添加行数据 添加数据行到主键索引 获取根节点 二分查找定位到 btree 插入位置 记录事务 undo log 到 buffer 写入 undo log 时,会将 undo log 的 btree...
H2 Database MVStore 初始化
发表于2024-08-20|H2
H2 Database MVStore 初始化作用MVStore(multi-version store):H2 的默认存储子系统,支持多版本,持久化的、日志结构 的 键值存储。 功能123456789101112Maps 每个 store 包含多个 mvMaps,可以通过 java.util.Map 接口访问Versions 支持多版本Transactions 支持事务(并发事务&两阶段提交)Concurrent Operations and Caching 支持并发读写Log Structured Storage 日志结构化存储支持文件存储和内存操作支持可插拔 文件存储格式12345# 文件存储格式[ file header 1 ] [ file header 2 ] [ chunk ] [ chunk ] ... [ chunk ]# chunk 存储格式[ header ] [ page ] [ page ] ... [ page ] [ footer ] 12345结构 File Header 文件头 Chunk...
H2 Database IDEA 环境搭建
发表于2024-08-20|H2
H2 Database IDEA 源码 DEBUG 环境搭建基于最新的 version-2.3.230 拉取分支。 123git remote add h2 https://github.com/h2database/h2database.git git fetch h2git checkout -b version-2.3.230 version-2.3.230 使用12345# 启动java -jar h2*.jar# H2 shell 方式使用java -cp h2-*.jar org.h2.tools.Shell h2 shell启动类 org.h2.tools.Shell 12# 配置启动参数-url "jdbc:h2:~/test" -user "sa" -password "" 测试 casecreate table + insert 1234567891011121314151617181920212223242526272829303132333435363738394041Welcome...
Apache Omid Client 组件实现原理
发表于2024-07-23|Omid
Apache Omid Client 组件实现原理作用通过 TransactionManager 开启/提交/回滚事务,提供事务内快照隔离级别的读写操作。 使用123456789101112131415// 1.创建 transaction managerTransactionManager tm = HBaseTransactionManager.newInstance();// 2.通过 transactin manger 开启事务Transaction tx0 = tm.begin();// 3.事务内插入数据byte[] rowId = rowIdGenerator.getRowId();Put initialPut = new Put(rowId);initialPut.addColumn(family, qualifier, initialData);txTable.put(tx0, initialPut);// 4.事务内读取数据Get tx2Get = new Get(rowId);tx2Get.addColumn(family,...
Ubuntu Desktop Docker 配置代理
发表于2024-07-17|Docker
Ubuntu Desktop Docker 配置代理主要解决 docker pull 拉取不了镜像问题. Docker Desktop 配置代理这个比较简单, 直接在 Docker Desktop 里设置 Proxies, 示例如下: http://127.0.0.1:7890 Docker Engine 配置代理Docker Engine 使用下面配置文件即可; 方式1: 配置 /etc/docker/daemon.json 1sudo vim /etc/docker/daemon.json 123{ "registry-mirrors": ["https://docker.m.daocloud.io"]} 方式2:非 root 用户,如果安装了 docker desktop 需要通过 docker context 切换到 docker engine; docker pull 是由守护进程 dockerd 执行,因此代理需添加在 dockerd 的 systemd...
安装 PaddleOCR
发表于2024-07-17|AI
安装 PaddleOCR创建 conda env。 12345# 创建 conda envconda create --name paddle_env python=3.8source activate paddle_envconda activate paddle_env 安装 paddle。 12345# 安装 paddlepaddle,使用清华源pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple/# 安装 paddle hub,使用清华源pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装 paddle ocr 中文识别服务。 1234567# paddle ocr 中文识别,可以部署成服务http调用# 安装依赖pip install shapely pyclipper# 安装ocrhub install chinese_ocr_db_crnn_server 使用: 12345678910#...
123…9
avatar
flyingzc
不积跬步无以至千里
不积小流无以成江海
文章
84
标签
36
分类
29
Follow Me
公告
FlyingZC's Blog
最新文章
Apache Ignite 开启事务执行流程2025-10-11
Apache Ignite 分布式事务原理2025-09-18
Apache Ignite IDEA 环境搭建2025-09-11
ShardingSphere JDBC 使用 Druid 连接池 ResultSet 内存泄露分析2025-07-01
Jmeter 压测 ShardingSphere2025-07-01
分类
  • ADB1
  • AI1
  • Concurrent2
  • Coral2
  • Data Structure1
  • Docker1
  • Druid1
  • Dubbo7
标签
MySQL spring Redis Druid Termux H2 Ignite Omid Ubuntu Desktop ShardingSphere Dubbo Otter git Ubuntu Coral Hotspot Docker Concurrent SQL-Parse Spring Zookeeper SpringBoot Maven Linux Tool Database Data Structure Tomcat Paddle ADB springboot Android Jmeter Transaction Narayana Percolator
归档
  • 十月 2025 1
  • 九月 2025 2
  • 七月 2025 3
  • 四月 2025 1
  • 三月 2025 1
  • 十一月 2024 1
  • 十月 2024 4
  • 九月 2024 2
网站信息
文章数目 :
84
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2020 - 2025 By flyingzc