<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Database on GYM</title><link>https://oooooomy.cloud/tags/database/</link><description>Recent content in Database on GYM</description><generator>Hugo</generator><language>en-us</language><copyright>© ccdgr</copyright><lastBuildDate>Tue, 17 Mar 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://oooooomy.cloud/tags/database/index.xml" rel="self" type="application/rss+xml"/><item><title>Learning spatial index</title><link>https://oooooomy.cloud/posts/spatial-index/dlhm/</link><pubDate>Tue, 17 Mar 2026 10:00:00 +0800</pubDate><guid>https://oooooomy.cloud/posts/spatial-index/dlhm/</guid><description>&lt;blockquote&gt;
&lt;p&gt;空间索引是数据库系统的核心组件。传统方法（R-tree, Hilbert 曲线）在高偏态分布和动态更新场景下面临秩值簇化和长尾延迟的挑战。本文提出三阶段的学习型空间索引方案。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-dlhm密度感知的-hilbert-降维映射"&gt;1. DLHM：密度感知的 Hilbert 降维映射&lt;/h2&gt;
&lt;h3 id="11-问题定义"&gt;1.1 问题定义&lt;/h3&gt;
&lt;p&gt;给定 $d$ 维空间数据集 $\mathcal{D} = \{\mathbf{p}_1, \dots, \mathbf{p}_N\}$，其中 $\mathbf{p}_i \in \mathbb{R}^d$（地理空间场景下通常 $d = 2$）。目标是将 $\mathcal{D}$ 映射到一维有序序列 $\pi: \mathcal{D} \to [0, M-1]$，使得空间邻近性在一维序列中得以保持：&lt;/p&gt;
$$
\mathbb{E}_{(\mathbf{p}_i, \mathbf{p}_j) \sim \mathcal{D}}\left[|\pi(\mathbf{p}_i) - \pi(\mathbf{p}_j)| \;\middle|\; \|\mathbf{p}_i - \mathbf{p}_j\|_2 \leq \epsilon\right] \to \min
$$&lt;h3 id="12-密度分布形式化模型"&gt;1.2 密度分布形式化模型&lt;/h3&gt;
&lt;p&gt;定义空间密度函数 $\rho(\mathbf{x})$ 为位置 $\mathbf{x}$ 处的局部数据密度。采用核密度估计（KDE）：&lt;/p&gt;
$$
\rho(\mathbf{x}) = \frac{1}{N h^d} \sum_{i=1}^{N} K\left(\frac{\|\mathbf{x} - \mathbf{p}_i\|}{h}\right)
$$&lt;p&gt;其中 $K(\cdot)$ 为 Epanechnikov 核函数，$h$ 为带宽参数，按 Silverman 规则 $h = 1.06 \cdot \hat{\sigma} \cdot N^{-1/5}$ 确定。&lt;/p&gt;</description></item><item><title>MySQL InnoDB 核心机制：MVCC、索引、事务、锁与 SQL 优化</title><link>https://oooooomy.cloud/posts/mysql/innodb/</link><pubDate>Fri, 27 Dec 2024 15:30:00 +0800</pubDate><guid>https://oooooomy.cloud/posts/mysql/innodb/</guid><description>&lt;blockquote&gt;
&lt;p&gt;面试必问，生产必用。把 InnoDB 的几个核心机制串起来理一遍。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="innodb-架构概览"&gt;InnoDB 架构概览&lt;/h2&gt;
&lt;p&gt;InnoDB 是 MySQL 默认存储引擎，核心特性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B+Tree 索引&lt;/strong&gt; — 主键索引（聚簇） + 二级索引&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MVCC&lt;/strong&gt; — 多版本并发控制，读不阻塞写&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;行级锁&lt;/strong&gt; — Record Lock / Gap Lock / Next-Key Lock&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;事务&lt;/strong&gt; — ACID，通过 undo log + redo log 保证&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Buffer Pool&lt;/strong&gt; — 内存缓冲池，缓存数据页和索引页&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌─────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ 客户端连接 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─────────────────┬───────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌─────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ MySQL Server 层 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ 连接器 → 分析器 → 优化器 → 执行器 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─────────────────┬───────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌─────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ InnoDB 存储引擎 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ┌──────────┐ ┌──────────┐ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │Buffer Pool│ │ Redo Log│ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └──────────┘ └──────────┘ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ┌──────────┐ ┌──────────┐ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ Undo Log │ │ 锁管理 │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └──────────┘ └──────────┘ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─────────────────────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="btree-索引"&gt;B+Tree 索引&lt;/h2&gt;
&lt;h3 id="为什么是-btree"&gt;为什么是 B+Tree&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;数据结构&lt;/th&gt;
					&lt;th&gt;特点&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;二叉搜索树&lt;/td&gt;
					&lt;td&gt;可能退化成链表，高度太高&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;红黑树&lt;/td&gt;
					&lt;td&gt;二叉，高度依然大，IO 次数多&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;B-Tree&lt;/td&gt;
					&lt;td&gt;多路平衡，非叶子节点也存数据&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;B+Tree&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;数据只存叶子节点，叶子形成有序链表&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;B+Tree 的优势：&lt;/p&gt;</description></item></channel></rss>