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月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
122 3
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
208 6
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
136 1
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
940 1
|
9月前
|
存储 数据挖掘 数据处理
2600 万表流计算分析如何做到? 时序数据库 TDengine 助力数百家超市智能化转型
在生鲜超市的高效运营中,实时数据分析至关重要。万象云鼎的“云鲜生”通过智能秤+网关+软件系统的组合,实现了销售数据的精准管理与优化。而在数据处理方面,TDengine 的流计算能力成为了这一方案的核心支撑。本文详细分享了“云鲜生”如何利用 TDengine 高效存储和分析海量销售数据,在优化超市运营、提升用户体验的同时,解决高基数分组、高并发查询等技术挑战。
252 1
|
8月前
|
存储 监控 数据挖掘
消防行业如何借助时序数据库 TDengine 打造高效的数据监控与分析系统
本篇文章来自“2024,我想和 TDengine 谈谈”征文活动的优秀投稿,深入探讨了如何在消防行业中运用 TDengine 进行业务建模。文章重点介绍了如何通过 TDengine 的超级表、标签设计和高效查询功能,有效管理消防监控系统中的时序数据。作者详细阐述了实时监控、报警系统以及历史数据分析在消防行业中的应用,展示了 TDengine 在数据压缩、保留策略和分布式架构下的强大优势。
242 0
|
10月前
|
关系型数据库 分布式数据库 数据库
瑶池数据库大讲堂|PolarDB HTAP:为在线业务插上实时分析的翅膀
瑶池数据库大讲堂介绍PolarDB HTAP,为在线业务提供实时分析能力。内容涵盖MySQL在线业务的分析需求与现有解决方案、PolarDB HTAP架构优化、针对分析型负载的优化(如向量化执行、多核并行处理)及近期性能改进和用户体验提升。通过这些优化,PolarDB HTAP实现了高效的数据处理和查询加速,帮助用户更好地应对复杂业务场景。
321 4
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库

热门文章

最新文章