h2database資料庫分析
1、 原始碼結構
git source: https://github.com/h2database/h2database.git
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 流程
這一段啟動程式碼的整個流程比較複雜:
需要初始化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 把資料庫中的概念抽象為一一對應的資料模型:
初始化和執行過程中的的呼叫時序圖
3、TODO
- RegularTable vs MVTable的效率
- 記憶體模式不開啟事務,如何支援 多執行緒?
- 儲存資料結構優化:Row、Table
相關文章
- 分析型資料庫:分散式分析型資料庫資料庫分散式
- 資料分析案例--USDA食品資料庫資料庫
- Oracle資料庫資料物件分析(上)Oracle資料庫物件
- Oracle資料庫資料物件分析(轉)Oracle資料庫物件
- MongoDB資料庫效能分析MongoDB資料庫
- SAP資料庫的分析資料庫
- MySQL資料庫優化分析MySql資料庫優化
- Dedecms 資料庫 結構分析資料庫
- 資料庫在資料分析中如何應用資料庫
- 時序資料庫分析-TimescaleDB時序資料庫介紹資料庫
- openGauss資料庫分析問題資料庫
- 資料庫監聽夯故障分析資料庫
- 資料庫索引分裂 問題分析資料庫索引
- 分析資料庫日誌(LogMiner)資料庫
- 資料庫hang住,分析處理資料庫
- 故障分析 | MySQL 資料庫升級後,資料庫怎麼卡住了MySql資料庫
- 資料庫圈周盤點:資本正湧向分析型資料庫公司資料庫
- 資料庫內機器學習是資料分析的未來 - BDAN資料庫機器學習
- 資料庫新兵:分散式實時分析記憶體資料庫eSight資料庫分散式記憶體
- 如何透過SQLyog分析MySQL資料庫MySql資料庫
- 【MySQL】資料庫事務深入分析MySql資料庫
- 國產資料庫發展現狀分析資料庫
- Oracle資料庫壞塊典型案例分析Oracle資料庫
- MySQL資料庫故障分析-鎖等待(一)MySql資料庫
- iOS端資料庫解決方案分析iOS資料庫
- Python資料分析庫pandas基本操作Python
- 導數時資料庫hang住分析資料庫
- Nagios資料庫引數配置分析iOS資料庫
- 經營分析資料庫優化方案資料庫優化
- 對資料庫的統計和分析。資料庫
- mysql 資料庫效能分析工具簡介MySql資料庫
- 資料分析師如何應對資料庫取數後的離線分析資料庫
- 分析資料庫的事務隔離級別在資料庫選型分析的時候很重要資料庫
- 如何透過一條資料庫語句做資料分析資料庫
- Python資料分析工具庫-Numpy 陣列支援庫(一)Python陣列
- 資料庫異常智慧分析與診斷資料庫
- 一次資料庫響應慢分析資料庫
- 資料庫實踐丨MySQL多表join分析資料庫MySql