h2database 数据库分析

简介: 1、 源码结构 git source: https://github.com/h2database/h2database.git ![screenshot](http://img4.tbcdn.cn/L1/461/1/636124ed7f5dcf78355e3d3825e747f16ecf3466.png) h2 的源码不是标准的maven工程,需要重新进行目录组织生成maven

1、 源码结构

git source: https://github.com/h2database/h2database.git

screenshot

h2 的源码不是标准的maven工程,需要重新进行目录组织生成maven工程,test目录下的代码需要依赖main目录的代码、tools目录下jaqu、mode、dev目录的代码。

2、启动测试
使用embeded memory模式启动,为了最大化数据更新的效率,停用undo/redo log,同时为了支持多线程访问使用MULTI_THREAD=1 && LOCK_MODE=1 模式。

2.1 执行

服务器启动代码如下(kotlin代码):

Class.forName("org.h2.Driver")
val conn = DriverManager.getConnection("jdbc:h2:mem:test;LOG=0;LOCK_MODE=1;UNDO_LOG=0;MV_STORE=false;MULTI_THREADED=1", "sa", "sa")

如果LOCK_MODE = 0 不允许使用MULTI_THREAD模式,更新数据的时候是对database进行synchronized操作,容易出现竞争。

2.2 流程

这一段启动代码的整个流程比较复杂:

startup_embedded
需要初始化INFOMATION_SCHEMA这个管理元数据的Schema。之后sql的执行流程就比较简单,把sql通过Recursive Decsent Parser解析为h2的各种command。

H2实现了ANSI-SQL89标准,并且实现了基于B-tree的存储引擎,而MVStore是新一代的存储引擎,用来替换基于Btree存储引擎。

H2 逻辑处理分层:

        JDBC Driver
        Connection/Session
        SQL Parser: Recursive-descent parser
        Command解析执行:
                org.h2.command.ddl Commands that modify schema data structures
                org.h2.command.dml Commands that modify data
        Table/Index/Constrains
                org.h2.table Implementations of different kinds of tables
                org.h2.index Implementations of different kinds of indices, indexes are simply stored as special kinds of tables.
        Undo Log, redo Log, Transaction Layer: org.h2.store
        B-tree engine, MVStore engine
        FileSystem abstraction: memory or file

2.3 涉及类

h2database 把数据库中的概念抽象为一一对应的数据模型:

h2db

初始化和执行过程中的的调用时序图

h2db1

3、TODO

  • RegularTable vs MVTable的效率
  • 内存模式不开启事务,如何支持 多线程?
  • 存储数据结构优化:Row、Table
目录
相关文章
|
2月前
|
Cloud Native OLAP OLTP
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
131 4
|
4月前
|
SQL NoSQL 关系型数据库
二、什么是数据库(DataBase)
二、什么是数据库(DataBase)
71 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
102 0
|
4月前
|
SQL 关系型数据库 MySQL
后端接口性能优化分析-数据库优化(上)
后端接口性能优化分析-数据库优化
116 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(备份+恢复篇)(二)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(备份+恢复篇)
58 1
|
1天前
|
分布式计算 Java 关系型数据库
|
4月前
|
SQL 关系型数据库 MySQL
后端接口性能优化分析-数据库优化(下)
后端接口性能优化分析-数据库优化
76 1
|
12天前
|
存储 搜索推荐 数据库
如何选择合适的矢量数据库:选型指南与案例分析
【4月更文挑战第30天】面对众多矢量数据库,如何选择合适的?本文提供了一份选型指南和案例分析。首先,明确业务需求,如推荐系统、图像检索等场景的不同需求;其次,评估数据量,大型项目需选择支持分布式架构的数据库;再者,关注查询性能、技术成熟度和成本。案例中,电商企业选用Faiss实现高效推荐,而互联网公司则因大规模图像检索选择了Milvus,后者以其扩展性和准确性脱颖而出。选择矢量数据库需综合考虑,结合实际以找到最佳匹配。
|
17天前
|
SQL 调度 数据库
【Database】Sqlserver如何定时备份数据库和定时清除
【Database】Sqlserver如何定时备份数据库和定时清除
24 2
|
1月前
|
存储 NoSQL 容灾
数据库非功能需求分析
本文探讨了业务研发在技术设计中如何满足非功能需求,重点关注数据库系统的角色。内容涵盖数据库的可用性、可靠性、性能、可修改性、安全性及成本。文章强调了根据业务场景选择合适的数据类型(如关系型、非关系型、内存型、图数据库和时间序列数据库)以及考虑数据容量和增长速度。对于性能需求,讨论了响应时间、吞吐量和并发处理能力。此外,还提到了升级路径、兼容性、备份方案和成本控制(硬件、软件和人力成本)在数据库管理中的重要性。
30 0