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

flyingzc's blog

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#...
Android 使用 ADB 调试
发表于2024-07-17|ADB
Android 使用 ADB 调试ADB 安装方式1: 通过 sudo apt install android-tools-adb 安装,试了下版本比较老了,用不起来. 方式2: 按照官网说明下载 Android Studio 或独立的 SDK 平台工具,两者都内含 ADB。下载完成后,配置环境变量. 12# vim ~/.bash_profileexport adb="/home/flyingzc/Android/Sdk/platform-tools/adb" 手机端设置:1.启用开发者选项2.启用USB调试 使用 ADB 连接手机方式1: USB 连接然后直接通过 usb 连接手机 和 电脑即可。运行 adb devices, 查看连接的设备。 12345➜ ~ adb devices* daemon not running; starting now at tcp:5037* daemon started successfullyList of devices attached5f541edd device 方式2: wifi...
123…9
avatar
flyingzc
不积跬步无以至千里
不积小流无以成江海
文章
83
标签
36
分类
29
Follow Me
公告
FlyingZC's Blog
最新文章
Apache Ignite 分布式事务原理2025-09-18
Apache Ignite IDEA 环境搭建2025-09-11
ShardingSphere JDBC 使用 Druid 连接池 ResultSet 内存泄露分析2025-07-01
Jmeter 压测 ShardingSphere2025-07-01
Maven Shade 插件替换 Calcite Jar 包 class 文件2025-07-01
分类
  • ADB1
  • AI1
  • Concurrent2
  • Coral2
  • Data Structure1
  • Docker1
  • Druid1
  • Dubbo7
标签
Ignite Dubbo Hotspot git SQL-Parse Database H2 Spring Ubuntu Desktop ADB springboot spring Data Structure SpringBoot Concurrent ShardingSphere Termux Omid Narayana Coral Otter Paddle Transaction Android Redis Zookeeper Druid MySQL Ubuntu Maven Linux Tomcat Tool Jmeter Docker Percolator
归档
  • 九月 2025 2
  • 七月 2025 3
  • 四月 2025 1
  • 三月 2025 1
  • 十一月 2024 1
  • 十月 2024 4
  • 九月 2024 2
  • 八月 2024 2
网站信息
文章数目 :
83
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2020 - 2025 By flyingzc