Database
-
StarRocks Elasticsearch 外表查询源码解析
这篇文章从源码角度梳理了 StarRocks 查询 Elasticsearch 外表的整体流程。正文先补充 index、mapping、doc_values、`_source`、text 和 keyword 等 ES 基础概念,再说明创建外表后 FE 如何通过 `EsRepository`、`EsMetaStateTracker` 定期同步版本、mapping 和 shard 元信息,并指出 shard 地址选择上的一个已知问题;后半部分继续分析 FE 侧 `EsScanNode` 如何决定 doc_values 下推与分片分配,以及 BE 侧 `ESDataSource`、`ESScanReader`、`ScrollParser` 如何生成 Query DSL、执行 scroll 读取并把返回结果填充到 chunk 中。
-
StarRocks Docker 开发环境搭建指南
这篇文章介绍了如何借助 Docker 为 StarRocks 构建统一的开发环境,重点解决 BE 本地编译复杂、依赖沉重以及远程调试不便的问题。正文先分析这套方案在 thirdparty 编译、链接速度、SSH 远程开发、GDB 调试和端口隔离上的优势与限制,再说明镜像、目录映射和容器启动方式,随后分别比较 VS Code、Jetbrains Gateway 和代码同步式远程开发的使用体验,并给出 FE 与 BE 的远程 Debug 配置方法和一些实际开发中的注意事项。
-
StarRocks FE 在 IDEA 上开发环境设置
这篇文章记录了如何在 M1 MacBook 上为 StarRocks FE 配置可直接运行和调试的 IDEA 开发环境,并补充说明这套方法对 Linux 环境也有参考价值。正文先梳理 Thrift、Protobuf、Maven、JDK 和 Python3 等基础依赖,再说明 `thirdparty` 目录、环境变量、源文件生成和 FE 编译步骤,随后重点介绍如何调整 IDEA 工程、复制运行所需目录、创建日志和元信息目录,以及修改 `fe.conf` 和启动参数,使 FE 能在本地正常启动并进入 Web UI。
-
Bitmap Indexing(位图索引)
这篇文章用一个包含 `Job` 和 `Sex` 字段的简单员工表示例,介绍了 Bitmap Indexing 的基本存储方式和查询优势。正文先说明 bitmap 索引会为每种取值维护一段位图,并展示如何通过按位与运算快速筛选同时满足多个条件的记录,随后将这种做法与传统 B+ 树在多条件分析场景下的开销进行对比,最后总结了 bitmap 索引适合低基数字段、OLAP 多维分析和逻辑运算场景,以及在高基数字段和频繁更新场景下的局限。
-
2021 CMU 15-445 实验笔记
这篇文章记录了作者完成 2021 CMU 15-445 数据库课程各个项目时的实现思路与踩坑经验,内容覆盖 Buffer Pool、Extendible Hash Table、查询执行器和事务并发控制。正文先概述课程价值和各个 Project 的难度排序,再分别总结 LRU Replacement Policy、Buffer Pool Manager、并行 Buffer Pool、可扩展哈希表的桶与目录设计、Volcano 模型下的执行器实现,以及事务相关模块的关键注意点。文章除了复盘代码层面的实现细节,也强调了配合课程 PPT 和数据库教材理解查询处理、事务与并发控制的重要性。
-
数据库并发控制原理
这篇文章系统梳理了数据库事务与并发控制的核心概念。正文先从事务的 ACID 特性讲起,说明原子性、隔离性和持久性在数据库中的具体含义,再介绍 serial schedule、serializable、recoverable schedule、cascadeless schedule 等调度模型,以及 conflict serializable 和 view serializable 的区别。后半部分重点展开数据库并发控制的实现方式,包括基于锁的悲观并发控制、Two-Phase Lock 与 Rigorous 2PL 的行为差异,以及死锁检测恢复和死锁预防等常见处理策略。
-
数据库查询实现原理
这篇文章围绕数据库查询执行中的几个核心算子展开,重点从 I/O cost 的角度梳理排序、聚合和连接操作的实现原理。正文先介绍 External Merge Sort 的两阶段流程、pass 数量与总 I/O 开销计算,以及利用 B+ 树索引完成排序的不同场景;随后讨论 GROUP BY、DISTINCT 等聚合操作如何通过排序或哈希实现;后半部分则系统比较多种 Join 策略,包括 Nested Loop Join、Block Nested Loop Join、Index Nested Loop Join、Sort-Merge Join 和 Hash Join,并分析它们在不同内存与索引条件下的代价与适用场景。
-
Extendible Hash Table 算法实现
这篇文章围绕 Extendible Hash Table 的工程实现展开,重点补足很多资料只讲扩容不讲收缩、只讲概念不讲代码的空白。正文先约定 directory、bucket、page、global depth、local depth 和 split image bucket 等术语与规则,再分别说明如何根据深度生成 mask、如何计算兄弟 bucket、以及 directory 的 grow 和 shrink 逻辑。后半部分详细拆解插入、删除和收缩流程,解释桶分裂时 page 的重新分配、directory 指针和 local depth 的更新方式,以及在 bucket 为空时如何与 split image bucket 合并并尝试压缩 directory。