Smith
-
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 多维分析和逻辑运算场景,以及在高基数字段和频繁更新场景下的局限。
-
以后再也不折腾博客了,立帖为证!
这篇文章回顾了作者这些年在 Wordpress、Ghost、Halo、Hexo、Typecho、Hugo 等博客程序之间来回迁移的折腾经历,并逐一说明每次更换背后的原因。正文前半部分主要比较不同程序在 Markdown 支持、主题生态、部署复杂度、评论和搜索能力上的取舍,后半部分则补充了 Wordpress 主题从 Argon、7b2 到 Justnews 的切换过程,以及主题功能、性能和百度 SEO 表现对博客运营的实际影响。
-
应届生如何半年找到一份数据库内核开发的工作
这篇文章结合作者自己的春招经历,整理了一条面向应届生的数据库内核方向学习与求职路线。正文先交代自身背景和时间投入方式,再按顺序分析 6.824、CS144、CMU 15-445、TinyKV 等项目各自的价值、收益和推荐程度,同时补充简历栏目的组织思路,以及数据库、分布式系统、事务并发控制、Raft、算法和设计题等高频面试知识点。最后文章还汇总了个人的面试结果,用实际经历说明这条学习路径的可行性和取舍。
-
Raft 成员变更的相关问题
这篇文章围绕 Raft 成员变更中的几个关键问题展开,重点梳理为什么直接按普通日志方式应用配置变更会带来双 leader 风险,以及 ConfChange 为什么通常在持久化后即可生效而不必等到 apply。正文随后系统介绍了 Joint Consensus 和单步成员变更两种方案,分析它们如何通过保证新旧配置的 quorum 存在交集来避免一致性问题,并进一步讨论单步成员变更已知的 bug、no-op 修正方法,以及新节点追赶日志、Learner、leader 移除自己等实现层面的可用性问题。
-
分布式原子提交协议大全
这篇文章围绕分布式系统中的原子提交问题,梳理了 2PC、3PC、TCC 和 SAGA 等常见协议的定位、流程与局限。正文先说明为什么 2PC、3PC 更适合被称为 atomic commitment protocol,而不是广义共识算法,再分析 2PC 在协调者和参与者不同故障场景下的恢复行为,以及它在阻塞和数据不一致上的问题;随后介绍 3PC 如何通过超时机制缓解阻塞但仍无法避免不一致,最后再用业务视角解释 TCC 的重试式确认/取消流程,以及 SAGA 通过补偿事务拆分大事务的设计思路。
-
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 的行为差异,以及死锁检测恢复和死锁预防等常见处理策略。