-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
240 lines (218 loc) · 34.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>flyingzc's blog</title><meta name="author" content="flyingzc"><meta name="copyright" content="flyingzc"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="不积跬步无以至千里不积小流无以成江海">
<meta property="og:type" content="website">
<meta property="og:title" content="flyingzc's blog">
<meta property="og:url" content="https://flyingzc.github.io/index.html">
<meta property="og:site_name" content="flyingzc's blog">
<meta property="og:description" content="不积跬步无以至千里不积小流无以成江海">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://flyingzc.github.io/images/zc-icon.jpeg">
<meta property="article:author" content="flyingzc">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://flyingzc.github.io/images/zc-icon.jpeg"><link rel="shortcut icon" href="/images/zc-icon.jpeg"><link rel="canonical" href="https://flyingzc.github.io/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><meta name="google-site-verification" content="googleb7ed7c2cc0631efa"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css"><script>
(() => {
const saveToLocal = {
set: (key, value, ttl) => {
if (!ttl) return
const expiry = Date.now() + ttl * 86400000
localStorage.setItem(key, JSON.stringify({ value, expiry }))
},
get: key => {
const itemStr = localStorage.getItem(key)
if (!itemStr) return undefined
const { value, expiry } = JSON.parse(itemStr)
if (Date.now() > expiry) {
localStorage.removeItem(key)
return undefined
}
return value
}
}
window.btf = {
saveToLocal,
getScript: (url, attr = {}) => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
Object.entries(attr).forEach(([key, val]) => script.setAttribute(key, val))
script.onload = script.onreadystatechange = () => {
if (!script.readyState || /loaded|complete/.test(script.readyState)) resolve()
}
script.onerror = reject
document.head.appendChild(script)
}),
getCSS: (url, id) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onload = link.onreadystatechange = () => {
if (!link.readyState || /loaded|complete/.test(link.readyState)) resolve()
}
link.onerror = reject
document.head.appendChild(link)
}),
addGlobalFn: (key, fn, name = false, parent = window) => {
if (!false && key.startsWith('pjax')) return
const globalFn = parent.globalFn || {}
globalFn[key] = globalFn[key] || {}
globalFn[key][name || Object.keys(globalFn[key]).length] = fn
parent.globalFn = globalFn
}
}
const activateDarkMode = () => {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
const activateLightMode = () => {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
btf.activateDarkMode = activateDarkMode
btf.activateLightMode = activateLightMode
const theme = saveToLocal.get('theme')
theme === 'dark' ? activateDarkMode() : theme === 'light' ? activateLightMode() : null
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
document.documentElement.classList.toggle('hide-aside', asideStatus === 'hide')
}
const detectApple = () => {
if (/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)) {
document.documentElement.classList.add('apple')
}
}
detectApple()
})()
</script><script async="async" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><script>(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: '',
enable_page_level_ads: 'true'
});</script><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
translate: undefined,
highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false,"highlightFullpage":false,"highlightMacStyle":false},
copy: {
success: '复制成功',
error: '复制失败',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'null',
Snackbar: undefined,
infinitegrid: {
js: 'https://cdn.jsdelivr.net/npm/@egjs/infinitegrid/dist/infinitegrid.min.js',
buttonText: '加载更多'
},
isPhotoFigcaption: false,
islazyloadPlugin: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'flyingzc\'s blog',
isHighlightShrink: false,
isToc: false,
pageType: 'home'
}</script><link rel="stylesheet" href="/self/github-dark.css"><meta name="generator" content="Hexo 7.0.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img text-center"><img src="/images/zc-icon.jpeg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data text-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">77</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">32</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">25</div></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于我</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url(/images/home1.jpg);"><nav id="nav"><span id="blog-info"><a class="nav-site-title" href="/"><span class="site-name">flyingzc's blog</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于我</span></a></div></div><div id="toggle-menu"><span class="site-page"><i class="fas fa-bars fa-fw"></i></span></div></div></nav><div id="site-info"><h1 id="site-title">flyingzc's blog</h1><div id="site_social_icons"><a class="social-icon" href="https://github.com/FlyingZC" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts nc" id="recent-posts"><div class="recent-post-items"><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/coral/coral01-build.html" title="LinkedIn Coral 编译&SQL翻译使用">LinkedIn Coral 编译&SQL翻译使用</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-03-07T00:00:00.000Z" title="发表于 2025-03-07 00:00:00">2025-03-07</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Coral/">Coral</a></span></div><div class="content">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' ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database06-transaction-isolation.html" title="H2 Database 事务隔离性实现原理">H2 Database 事务隔离性实现原理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-11-12T00:00:00.000Z" title="发表于 2024-11-12 00:00:00">2024-11-12</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">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...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database12-select.html" title="H2 Database Select 语句执行流程">H2 Database Select 语句执行流程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-10-24T00:00:00.000Z" title="发表于 2024-10-24 00:00:00">2024-10-24</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">使用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 查询优化 计算执行计划的成本 创建查询优化器 优化查询计划 计算最佳查询计划 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database06-transaction-rollback.html" title="H2 Database 事务 Rollback 流程实现原理">H2 Database 事务 Rollback 流程实现原理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-10-16T00:00:00.000Z" title="发表于 2024-10-16 00:00:00">2024-10-16</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">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...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database03-mvstore-commit.html" title="H2 Database MVStore Commit 流程">H2 Database MVStore Commit 流程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-10-15T00:00:00.000Z" title="发表于 2024-10-15 00:00:00">2024-10-15</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">H2 Database MVStore Commit 流程作用BackgroundWriterThread 按照固定频率,将内存里修改的尚未保存的 Page 信息持久化到存储。 流程启动阶段创建后台线程org.h2.mvstore.MVStore#setAutoCommitDelay1.创建 BackgroundWriterThread 后台线程2.创建序列化线程 serializationExecutor3.创建持久化线程 bufferSaveExecutor设置自动提交更改的最大延迟(单位毫秒)。 默认值为 1000,这意味着所有更改最多在一秒后提交。 要禁用自动提交,需要将值设置为 0。在这种情况下,仅在显式调用 commit 时才会提交更改。 BackgroundWriterThread 线程逻辑定时任务周期性执行,比对内存里的 MVMap...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database05-page.html" title="H2 Database MvMap 插入数据流程">H2 Database MvMap 插入数据流程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-10-12T00:00:00.000Z" title="发表于 2024-10-12 00:00:00">2024-10-12</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">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...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database06-transaction-commit.html" title="H2 Database 事务 Commit 流程实现原理">H2 Database 事务 Commit 流程实现原理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-09-28T00:00:00.000Z" title="发表于 2024-09-28 00:00:00">2024-09-28</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">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...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database08-insert.html" title="H2 Database SQL 插入流程">H2 Database SQL 插入流程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-09-03T00:00:00.000Z" title="发表于 2024-09-03 00:00:00">2024-09-03</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">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...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database02-mvstore-init.html" title="H2 Database MVStore 初始化">H2 Database MVStore 初始化</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-08-20T07:00:00.000Z" title="发表于 2024-08-20 07:00:00">2024-08-20</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">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...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/h2/h2database01-build.html" title="H2 Database IDEA 环境搭建">H2 Database IDEA 环境搭建</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-08-20T00:00:00.000Z" title="发表于 2024-08-20 00:00:00">2024-08-20</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/H2/">H2</a></span></div><div class="content">H2 Database IDEA 源码 DEBUG 环境搭建基于最新的 version-2.3.230 拉取分支。 123git remote add h2 https://github.com/h2database/h2database.git git fetch h2git checkout -b version-2.3.230 version-2.3.230 使用12345# 启动java -jar h2*.jar# H2 shell 方式使用java -cp h2-*.jar org.h2.tools.Shell h2 shell启动类 org.h2.tools.Shell 12# 配置启动参数-url "jdbc:h2:~/test" -user "sa" -password "" 测试 casecreate table + insert 1234567891011121314151617181920212223242526272829303132333435363738394041Welcome...</div></div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><span class="space">…</span><a class="page-number" href="/page/8/#content-inner">8</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info text-center"><div class="avatar-img"><img src="/images/zc-icon.jpeg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info-name">flyingzc</div><div class="author-info-description">不积跬步无以至千里<br/>不积小流无以成江海</div><div class="site-data"><a href="/archives/"><div class="headline">文章</div><div class="length-num">77</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">32</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">25</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/FlyingZC"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons"><a class="social-icon" href="https://github.com/FlyingZC" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">FlyingZC's Blog</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/coral/coral01-build.html" title="LinkedIn Coral 编译&SQL翻译使用">LinkedIn Coral 编译&SQL翻译使用</a><time datetime="2025-03-07T00:00:00.000Z" title="发表于 2025-03-07 00:00:00">2025-03-07</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/h2/h2database06-transaction-isolation.html" title="H2 Database 事务隔离性实现原理">H2 Database 事务隔离性实现原理</a><time datetime="2024-11-12T00:00:00.000Z" title="发表于 2024-11-12 00:00:00">2024-11-12</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/h2/h2database12-select.html" title="H2 Database Select 语句执行流程">H2 Database Select 语句执行流程</a><time datetime="2024-10-24T00:00:00.000Z" title="发表于 2024-10-24 00:00:00">2024-10-24</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/h2/h2database06-transaction-rollback.html" title="H2 Database 事务 Rollback 流程实现原理">H2 Database 事务 Rollback 流程实现原理</a><time datetime="2024-10-16T00:00:00.000Z" title="发表于 2024-10-16 00:00:00">2024-10-16</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/h2/h2database03-mvstore-commit.html" title="H2 Database MVStore Commit 流程">H2 Database MVStore Commit 流程</a><time datetime="2024-10-15T00:00:00.000Z" title="发表于 2024-10-15 00:00:00">2024-10-15</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
<a class="card-more-btn" href="/categories/" title="查看更多">
<i class="fas fa-angle-right"></i></a>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/ADB/"><span class="card-category-list-name">ADB</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/AI/"><span class="card-category-list-name">AI</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Concurrent/"><span class="card-category-list-name">Concurrent</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Coral/"><span class="card-category-list-name">Coral</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Data-Structure/"><span class="card-category-list-name">Data Structure</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Docker/"><span class="card-category-list-name">Docker</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Dubbo/"><span class="card-category-list-name">Dubbo</span><span class="card-category-list-count">7</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/H2/"><span class="card-category-list-name">H2</span><span class="card-category-list-count">9</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/Narayana/" style="font-size: 1.4em; color: #99a5b6">Narayana</a> <a href="/tags/Zookeeper/" style="font-size: 1.45em; color: #99a7ba">Zookeeper</a> <a href="/tags/Hotspot/" style="font-size: 1.1em; color: #999">Hotspot</a> <a href="/tags/Database/" style="font-size: 1.4em; color: #99a5b6">Database</a> <a href="/tags/Dubbo/" style="font-size: 1.35em; color: #99a3b1">Dubbo</a> <a href="/tags/Coral/" style="font-size: 1.1em; color: #999">Coral</a> <a href="/tags/MySQL/" style="font-size: 1.1em; color: #999">MySQL</a> <a href="/tags/Data-Structure/" style="font-size: 1.1em; color: #999">Data Structure</a> <a href="/tags/Linux/" style="font-size: 1.25em; color: #999fa7">Linux</a> <a href="/tags/SQL-Parse/" style="font-size: 1.1em; color: #999">SQL-Parse</a> <a href="/tags/git/" style="font-size: 1.1em; color: #999">git</a> <a href="/tags/Tool/" style="font-size: 1.15em; color: #999b9e">Tool</a> <a href="/tags/Spring/" style="font-size: 1.15em; color: #999b9e">Spring</a> <a href="/tags/Redis/" style="font-size: 1.1em; color: #999">Redis</a> <a href="/tags/Concurrent/" style="font-size: 1.1em; color: #999">Concurrent</a> <a href="/tags/Ubuntu-Desktop/" style="font-size: 1.1em; color: #999">Ubuntu Desktop</a> <a href="/tags/Ubuntu/" style="font-size: 1.25em; color: #999fa7">Ubuntu</a> <a href="/tags/ShardingSphere/" style="font-size: 1.2em; color: #999da3">ShardingSphere</a> <a href="/tags/spring/" style="font-size: 1.1em; color: #999">spring</a> <a href="/tags/Otter/" style="font-size: 1.1em; color: #999">Otter</a> <a href="/tags/ADB/" style="font-size: 1.1em; color: #999">ADB</a> <a href="/tags/Omid/" style="font-size: 1.2em; color: #999da3">Omid</a> <a href="/tags/Docker/" style="font-size: 1.1em; color: #999">Docker</a> <a href="/tags/Termux/" style="font-size: 1.1em; color: #999">Termux</a> <a href="/tags/SpringBoot/" style="font-size: 1.1em; color: #999">SpringBoot</a> <a href="/tags/Android/" style="font-size: 1.1em; color: #999">Android</a> <a href="/tags/Paddle/" style="font-size: 1.1em; color: #999">Paddle</a> <a href="/tags/Tomcat/" style="font-size: 1.3em; color: #99a1ac">Tomcat</a> <a href="/tags/H2/" style="font-size: 1.4em; color: #99a5b6">H2</a> <a href="/tags/springboot/" style="font-size: 1.2em; color: #999da3">springboot</a> <a href="/tags/Transaction/" style="font-size: 1.5em; color: #99a9bf">Transaction</a> <a href="/tags/Percolator/" style="font-size: 1.1em; color: #999">Percolator</a></div></div><div class="card-widget card-archives">
<div class="item-headline">
<i class="fas fa-archive"></i>
<span>归档</span>
<a class="card-more-btn" href="/archives/"
title="查看更多">
<i class="fas fa-angle-right"></i>
</a>
</div>
<ul class="card-archive-list">
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2025/03/">
<span class="card-archive-list-date">
三月 2025
</span>
<span class="card-archive-list-count">1</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/11/">
<span class="card-archive-list-date">
十一月 2024
</span>
<span class="card-archive-list-count">1</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/10/">
<span class="card-archive-list-date">
十月 2024
</span>
<span class="card-archive-list-count">4</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/09/">
<span class="card-archive-list-date">
九月 2024
</span>
<span class="card-archive-list-count">2</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/08/">
<span class="card-archive-list-date">
八月 2024
</span>
<span class="card-archive-list-count">2</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/07/">
<span class="card-archive-list-date">
七月 2024
</span>
<span class="card-archive-list-count">5</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/06/">
<span class="card-archive-list-date">
六月 2024
</span>
<span class="card-archive-list-count">2</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/05/">
<span class="card-archive-list-date">
五月 2024
</span>
<span class="card-archive-list-count">1</span>
</a>
</li>
</ul>
</div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站信息</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">77</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总浏览量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2025-03-07T01:07:17.669Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2020 - 2025 By flyingzc</div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="日间和夜间模式切换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>