• Apache Paimon PK 表的 data distribution

    这篇文章围绕 Apache Paimon PK 表的数据分布机制展开,梳理了 Fixed bucket、Dynamic bucket 和 Postpone bucket 三种 bucket 模式的路由方式、优缺点以及底层索引与 compact 行为。文章重点分析了主键不跨分区和跨分区更新两种场景下的差异,指出 fixed/postpone 在跨分区 upsert 时无法保证全局去重,而 dynamic bucket 会通过全局索引和额外写入删除记录来保证结果正确,但代价是 writer 初始化和性能开销更高。最后给出的建议是,在表设计时尽量把分区列纳入主键,以避免重复数据并获得更好的写入性能。

    2026年3月29日
    720
  • Arrow-rs Parquet Reader 浅析

    这篇文章从几个设计点切入,分析了 arrow-rs 上的 Parquet Reader 为什么和传统 C++ 系 Reader 有明显不同。正文先介绍 Bytes 零拷贝切片在 IO 合并场景下如何改善大 buffer 的生命周期管理,再说明文件系统接口如何把多 Range 读取与底层存储实现解耦,接着讨论 FileMetadata 解析优化、将 IO 与 decode 分离的 push 模式、以及延迟物化在跳页、RowSelection 选择、列缓存和零拷贝列构造上的具体做法,最后点出这些设计如何为未来更细粒度的内存控制和可观测性打下基础。

    2026年1月11日
    2442
  • Apache Iceberg Delete File 解析

    这篇文章围绕 Apache Iceberg Delete File 的三种实现展开,重点梳理 Position Delete、Equality Delete 和 Deletion Vector 在文件结构、写入来源与读时匹配逻辑上的差异。正文先分别说明三类 Delete File 如何记录被删除行、它们与 Data File 的对应关系以及 DeleteFileIndex 如何基于分区、路径和 spec 组织索引,随后分析 Data File 与 Delete File 的匹配规则,以及传统 Position Delete 和 Equality Delete 在 split 并发读取场景下带来的重复加载和执行开销,最后解释了为什么 Iceberg V3 更倾向用一对一的 Deletion Vector 替代旧方案。

    2025年6月22日
    1.1K1
  • Apache Iceberg 概念梳理

    这篇文章是一份面向源码阅读的 Apache Iceberg 概念梳理,目的不是讨论实现细节,而是把 Table Metadata、Snapshot、Manifest List、Manifest File、Manifest、Manifest Entry、Data File 和 Delete File 这些核心名词的层级关系先理顺。正文依次说明各类元信息文件和数据文件的职责,以及 Delete File 作为 Data File 变种在 Iceberg 中的定位,为后续继续阅读 Java 和 Rust 版本的 Iceberg 源码提供统一的术语参照。

    2025年5月1日
    1.2K2
  • OceanBase Mac/Win Clion 开发环境搭建

    这篇文章介绍了如何在 Mac 和 Windows 环境下借助 OrbStack、WSL2 和远端 Ubuntu,为 OceanBase 配置一套可用的 Clion 开发环境。正文先说明目标是让本机只负责写代码与索引,远端负责编译部署,再逐步介绍基础环境准备、OceanBase 编译与部署、Clion 的 Toolchains、CMake、Deployment 和 gcc/clang 头文件配置,以及第三方库 headers 的同步方法,最后补充了直接打开远端工程、调整 Clion JVM 内存和清理 cache 等使用建议。

    2025年1月29日
    1.6K4
  • 假如我还有三天假期

    这篇日记写在一段 15 天 gap 假期的尾声,记录了作者在离职后短暂空档期里的状态和感受。正文一方面列出了通关游戏、婚礼筹备、体检、拜访老师、买婚礼用品等已经完成的事项,另一方面也如实写下了 rust 学习、个人项目和与朋友相约活动未能完成的遗憾,最后把对这段难得长假即将结束的不舍和对更长休息时间的向往浓缩在三天倒计时里。

    2025年1月4日
    1.1K2
  • 从 StarRocks 离开,再出发

    这篇文章以时间线的方式回顾了作者从 2022 年加入 StarRocks 到 2024 年底离开的两年经历。正文先记录了当年春招选择创业公司、成为公司第一个研发校招生、在数据湖团队边学边做以及公司取消大小周、经历融资波动和裁员的过程,再写到 2024 年参与客户项目、感受到创业公司的起伏与团队变化,以及最终因为薪资、结婚开销和职业阶段变化而选择离开,最后把这种不舍、感谢和重新出发的心境完整留了下来。

    2024年12月25日
    2.8K18
  • Apache Parquet Bloom Filter

    这篇文章介绍了 Apache Parquet Bloom Filter 的实现与读取流程,重点聚焦于 Split Block Bloom Filter 在文件格式和 reader 侧的落地方式。正文先回顾 Bloom Filter 的基本原理以及它在 Parquet 中只适用于等值类谓词的前提,再解释 SBBF 如何把位图划分成 block 和 word,并利用 XxHash 将元素映射到单个 block 内完成插入与查找;后半部分进一步说明 BloomFilter 在 Thrift 元信息中的位置、PageHeader 与 Data 的读取方式,以及 reader 如何结合 offset、大小猜测和 IO 合并把每个 RowGroup 每列对应的 BloomFilter 加载出来。

    2024年11月23日
    1.5K1
  • Apache Parquet ZoneMap 过滤支持小记

    这篇文章围绕 Apache Parquet 中 ZoneMap 过滤的支持方式,讨论了 min-max 过滤在表达式系统里真正落地时会遇到的限制和工程实现选择。正文先说明 ZoneMap 适用的表达式类型以及单调函数、多列表达式和三值逻辑带来的复杂性,再结合 StarRocks 内表、ORC SearchArgument 和 DataFusion 的实现,分析它们如何把表达式改写成可用于 min-max 评估的形式、如何做 literal 推导与 prune,最后总结出各家当前基本都只在作用于单列的简单谓词上做 ZoneMap 过滤。

    2024年11月23日
    1.0K0
  • 最近日子过的是一团“浆糊”

    这篇日记写在假期尾声,主要记录了作者在工作后逐渐失去学生时代那种把写代码当成娱乐的状态,以及周末总被各种琐事切碎带来的疲惫感。正文一方面列举了打扫卫生、婚礼筹备、健身、社交和回老家等不断打断周末的事务,另一方面也反思了自己在工作日长期过载后只能在周末报复性休息的现实,最后把这种“既没学到什么,也没完全玩爽”的混沌感如实写了下来。

    2024年11月17日
    9835
点击查看更多