- 博客(219)
- 收藏
- 关注
原创 H2 Database Select 语句执行流程
在迭代时,如果到达页面边界时需要向上移动到父页面(从父页面再查找对应的孩子节点),当处于非叶页面时需要向下移动到叶页面,然后从叶子节点上根据 index 获取 value。执行查询时,会根据上面选定的索引创建对应的迭代器,同时会根据不同的事务隔离级别选择创建不同隔离级别的迭代器(比如 CommittedIterator)。H2 在执行查询操作之前,会根据不同索引计算对应的成本,然后选择成本最小的索引进行后续查询操作。单表查询时,会获取表的所有索引。然后根据索引列的条件迭代索引获取数据,获取后的数据会通过。
2025-05-09 08:21:32
417
原创 H2Database SQL 插入流程
插入数据时会先进行 SQL 解析,然后找到插入表对应的 Primary Index 对应的 BTree,然后根据二分法定位到插入的叶子节点,将 key(主键) 和 value(Row) 插入到指定的叶子节点.
2025-05-09 08:20:40
385
原创 H2 Database 事务 Rollback 实现原理
对于每一个 undoLogId,先遍历 undoLog btree 找到存储的 Record。Record 信息里包含了当前 undoLogId 操作的数据行信息。然后根据 Record 信息找到对应记录的 primary key btree,根据主键 id 找到对应行记录进行回滚操作。当执行事务回滚时,会获取当前事务所有的 undoLogId,然后从后向前遍历每一个 undoLogId。当记录回滚完之后,再回滚 undoLog btree 上的 undoLog 信息。
2025-05-09 08:19:54
239
原创 H2 Database 事务隔离性实现原理
一个 Transaction 是会包含多个 TransactionMap,比如对应该事务内涉及的多张表,每张表的 mvMap 都会有对应的 TransactionMap.查询数据时会获取当前 SQL 里涉及到的所有表,清理当前事务对象里缓存的这些表对应的缓存(清理 transactionMaps)。根据 undo log id(事务内从0开始,此时为0) 和 事务隔离级别创建 Transaction 对象.获取查询涉及的所有表,根据表对应的 mvMap 创建对应的 transactionMap。
2025-05-09 08:18:53
751
原创 H2 Database MvMap 插入数据流程
H2Database 使用 MVStore 作为默认的存储子系统,支持多版本,持久化的键值存储。其中每一个 MVMap 对象代表了一颗 btree。MVMap 里包含了 btree 根页面的引用,这颗 btree 可以表示一张表、一个索引,或者用来记录 undo log 等。
2025-05-09 08:16:53
405
原创 H2 Database MVStore Commit 流程
BackgroundWriterThread 按照固定频率,将内存里修改的尚未保存的 Page 信息持久化到存储。
2024-11-14 08:19:55
438
原创 Android 使用 ADB 调试
方式1: 通过安装,试了下版本比较老了,用不起来.方式2: 按照官网说明下载 Android Studio 或独立的 SDK 平台工具,两者都内含 ADB。下载完成后,配置环境变量.手机端设置:1.启用开发者选项2.启用USB调试。
2024-07-26 08:21:50
979
原创 Apache Omid Client 组件源码实现原理
通过 TransactionManager 开启/提交/回滚事务,提供事务内快照隔离级别的读写操作。
2024-07-26 08:20:58
230
原创 Apache Omid Idea Debug 环境搭建
IDEA 搭建 Apache Omid 源码 DEBUG 环境。Apache Omid 在 Apache HBase 之上提供了多行分布式事务的能力,支持全局 MVCC 功能。简单介绍编译过程。
2024-06-02 20:49:02
552
原创 IDEA 搭建 Otter 源码 DEBUG 环境
在适配 ShardingSphere-JDBC 同步 Otter 时,本地搭建 Otter Debug 环境记录。
2024-03-28 20:14:25
650
原创 MySQL驱动Add Batch优化实现
MySQL 驱动会在 JDBC URL 添加 rewriteBatchedStatements 参数时,对 batch 操作进行优化。本文测试各种参数组合的行为,并结合驱动代码简单分析。
2024-03-26 22:06:10
1604
原创 ShardingSphere XA事务无法恢复问题定位
在测试 ShardingSphere-Proxy 使用达梦数据库开启 XA 事务进行压测期间,kill 掉达梦数据库,等一段时间再重启达梦数据库,最终未完成的 XA 事务无法恢复,数据产生不一致。查看达梦上的 xid 一直有残留,没有被处理。使用 ShardingSphere-Proxy 结合其他主流数据库进行测试时无该问题。通过日志可以看到在压测期间,挂掉达梦数据库之后,有大量连接报错。节选错误日志如下:持续观察日志,能够看到 xa recover 查询出来的 xid 在不断增多。
2024-03-07 08:28:38
1612
原创 ShardingSphere-SQL 解析 Issue 处理流程
这是之前给社区写的 SQL 解析 Issue 的处理流程,可以帮助社区用户快速参与到 ShardingSphere-SQL 解析任务当中。
2024-03-05 08:42:21
1336
原创 ShardingSphere Narayana XA 事务不回滚问题定位
这个报错的含义简单来说就是这个事务已经在其他地方被标记成只可回滚了,不能再进行后续其他的操作。
2024-02-29 20:32:43
609
原创 ShardingSphere inline表达式线程安全问题定位
春节期间发现 ShardingSphere 事务 E2E 偶发执行失败问题,并且每次执行失败需要执行很久,直到超时。最终定位发现 inline 表达式存在线程安全问题。本文记录定位并解决 inline 表达式线程安全问题的过程。
2024-02-29 20:27:15
1179
1
原创 Ubuntu Desktop 22.04 禁用自动更新
禁用后查看结果如下,后续再查看 /var/log/apt/history.log 就不会有软件自动更新的日志了。如果只禁用上面的更新,unattended-upgrades 还是会在后台更新软件包,也需要禁止。
2023-12-14 23:34:52
6477
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅