ClickHouse的开源历程与实践
ClickHouse于十年前的2016年6月15日以开源形式发布。自那时起,它已成为最受欢迎的开源分析型数据库之一,拥有超过2000名贡献者。
在开源中构建 (Building in the open)
开源存在着不同层次。这些层次可以概括如下:
Level 0:最低级别,仅将代码对公众开放供阅读,除此之外没有更多。这适用于存档和博物馆级别的发布,例如Doom 或 MS-DOS。
Level 1:下一级别是软件通过公共仓库中的提交(commits)进行更新,但不一定接受贡献者。SQLite 和 Ladybird 就是这样的例子。
Level 2:接受贡献,但缺乏透明和开放的开发流程。大多数活跃的开源项目都处于这个级别。
Level 3:开放的贡献指南、任务跟踪器、代码审查系统、开发路线图、测试和CI系统、发布周期、用户支持和文档。
我始终以最高标准为目标。ClickHouse应该成为以下方面的最佳范例:
如何构建一个优秀的数据库——如果你想构建一个新的数据库,ClickHouse的源代码和开发实践将是最好的参考。我总是编写代码,以便每个人都能从中学习——通过保持其模块化、正交性(orthogonal)和良好的文档记录。当代码需要一个复杂概念时,我会从零开始在注释中进行解释,这样读者就不必查阅教科书、维基百科或AI。
一个学习C++开发的场所。许多人正在寻找代表软件工程前沿的仓库,而如今ClickHouse是C++中最受欢迎的开源仓库之一,在这里每个人都可以学习到激动人心的内容(如C++23)和枯燥的内容(如构建系统、持续集成和测试、代码审查实践以及AI)。
一个进行数据结构和性能优化的实验场所。你可以提交一个Pull Request作为实验,即使不以被合并为目标,它也会像生产版本一样受到严格的审查。是否发现了新的内存分配器、新的压缩库、新的哈希表、数据格式,或者排序算法?——请将其带到ClickHouse,它将对其进行彻底的内部检验。路线图还包括关于实验性、奇特,甚至是荒谬 的功能。
你可以为自己的工作感到骄傲的地方。 ClickHouse会在Changelog中感谢每一位贡献者,甚至在数据库内部的system.contributors表中都会列出!有很多情况是贡献者提交了一个最初的、不完整的特性实现,而我们帮助共同完成它。即使代码需要完全重写,我们也会主动承担起责任,并且总是感谢最初的作者,因为我们关心你的使用场景和促成这一切的最初意图。简单来说,我们热爱我们的贡献者。
开源之前 (Before open source)
子标题:原型与首次提交 (Prototypes and first commits)
ClickHouse的首次提交发生在2009年5月29日,它是一个性能优化(替换了`libc`函数`localtime`、`mktime`、`gmtime`,这些函数极其缓慢,并且在性能分析器中频繁出现,让我感到恼火)。但那是在ClickHouse正式存在之前。
ClickHouse最初是我在为Web分析系统进行数据处理时的一个实验。该系统类似于Google Analytics,接收来自网站的页面浏览日志,最初使用MySQL实现,数据处理部分使用C++,并且在MySQL无法满足需求的地方使用了自定义的C++数据结构。MySQL数据库存储了为客户预先聚合的报告,而自定义数据结构则用于计算用户会话、用户历史记录等。
那时的我的经验是:数据量在增长,现有方案无法应对,而新数据是实时涌入的。如果我们不能在五分钟内处理完五分钟的日志数据,就会产生延迟。我会一边观察延迟累积,一边寻找任何创造性的解决方案,并在同一工作日部署它。
结语
原文出处:ClickHouse博客:开源之路