avatar
文章
78
标签
32
分类
25
主页
归档
标签
分类
关于我
flyingzc's blog
主页
归档
标签
分类
关于我

flyingzc's blog

LinkedIn Coral SQL 翻译实现原理
发表于2025-04-09|Coral
LinkedIn Coral SQL 翻译实现原理总体流程以 Hive SQL 翻译成 Trino SQL 为例: 1234567Hive SQL -> Calcite RelNode 解析成抽象语法树 AST(比如通过 hive 的 antlr 语法解析) 遍历节点转换为 SqlNode SqlNode 转换为 Calcite RelNode(Coral IR)Calcite RelNode -> Trino SQL RelNode -> SqlNode SqlNode -> TrinoSQL 详细流程1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162631.Hive SQL -> Calcite RelNode 创建 HiveToRelConverter 1.父类 ToRelConverter 构造方法 ...
LinkedIn Coral 编译&SQL翻译使用
发表于2025-03-07|Coral
LinkedIn Coral 编译&SQL翻译使用Coral是一个 SQL 翻译、分析和重写引擎。简单来说,可以将一种数据库的 SQL 方言翻译成另一种数据库的 SQL 方言。 构建1.IDEA 编译代码123git clone https://github.com/linkedin/coral.git# 使用 Java 8./gradlew clean build 2.运行 Coral Service Rest 服务方式1: 1234567cd coral-service # 运行 coral 服务,指定参数: 使用本地元存储运行 Coral 服务../gradlew bootRun --args='--spring.profiles.active=localMetastore' # 后端服务在端口 8080 上运行(默认)# 启动阶段开启 remote debug../gradlew bootRun --debug-jvm --args='--spring.profiles.active=localMetastore' ...
H2 Database 事务隔离性实现原理
发表于2024-11-12|H2
H2 Database 事务隔离性实现原理使用测试 cases: 12345678910111213隔离级别 RC A 开启事务 B 开启事务 B 插入数据并提交 A 可以读取到隔离级别 RR A 开启事务 B 开启事务 A 查询 B 插入数据并提交 A 读取不到 A 自己插入数据 A 可以读取到自己插入的数据 功能H2 支持的事务隔离级别,定义在 IsolationLevel 里。包括 READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SNAPSHOT, SERIALIZABLE。其中 REPEATABLE_READ 不允许出现 脏读 和 不可重复读,但是允许出现幻读。SNAPSHOT 不允许出现 脏读 和 不可重复读 和 幻读。 12345678910111213141516171819202122232425262728293031323334/** * Level of isolation. */public enum IsolationLevel...
H2 Database Select 语句执行流程
发表于2024-10-24|H2
使用1234// CREATE TABLE IF NOT EXISTS test(id INT primary key, name VARCHAR(255))// insert into test(id, name) values(1, 'name1'), (2, 'name2'), (3, 'name3'), (4, 'name4');String sql = "SELECT * FROM test where id > 1 and name='name3'";ResultSet rs = stmt.executeQuery(sql); 查询 case: 1234主键查询覆盖索引查询索引查询+回表多表关联查询 功能模块类总体流程12345678910111213Select 语句 SQL 解析Select 语句 SQL 查询优化 计算执行计划的成本 创建查询优化器 优化查询计划 计算最佳查询计划 ...
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...
12…8
avatar
flyingzc
不积跬步无以至千里
不积小流无以成江海
文章
78
标签
32
分类
25
Follow Me
公告
FlyingZC's Blog
最新文章
LinkedIn Coral SQL 翻译实现原理2025-04-09
LinkedIn Coral 编译&SQL翻译使用2025-03-07
H2 Database 事务隔离性实现原理2024-11-12
H2 Database Select 语句执行流程2024-10-24
H2 Database 事务 Rollback 流程实现原理2024-10-16
分类
  • ADB1
  • AI1
  • Concurrent2
  • Coral2
  • Data Structure1
  • Docker1
  • Dubbo7
  • H29
标签
Otter SpringBoot Narayana Redis ShardingSphere Coral spring ADB springboot SQL-Parse Zookeeper Tool Dubbo Ubuntu Spring Hotspot Concurrent MySQL Data Structure Docker Android Ubuntu Desktop Percolator Database git Transaction Tomcat H2 Omid Termux Paddle Linux
归档
  • 四月 2025 1
  • 三月 2025 1
  • 十一月 2024 1
  • 十月 2024 4
  • 九月 2024 2
  • 八月 2024 2
  • 七月 2024 5
  • 六月 2024 2
网站信息
文章数目 :
78
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2020 - 2025 By flyingzc