关于孙印政

关于”在 StarRocks 中实现 ORC Chunk Writer“项目
StarRocks:在项目申请过程中,你是如何选择开源社区和项目的?有考虑哪些因素?在准备项目申请书的过程中做了哪些准备?有什么技巧可以推荐给之后参与活动的同学们么?
孙印政:在选择社区和项目之前首先是确定自己的申请方向,最好是跟自己的背景比较契合,如果事先就对一些开源社区有了解或者贡献过的话就更好了。我因为研究方向是数据库,且之前就知道和了解过 StarRocks,所以最后自然而然的选择了 StarRocks。
然后是项目的选择,我比较感兴趣的有存储和查询方向,所以针对 StarRocks 这两个方向的项目做了调研,花了大概一周的时间详细的阅读了项目相关模块的源码,有了大致的一个实现思路,并且通过邮件跟项目导师积极沟通。
我觉得项目申请书里重要的是对项目要有自己的理解和认识,在书写项目实现思路时展示更多的细节,最好是能够深入到源码层次。
StarRocks:请简单介绍一下你在本届活动中承担的开源项目。
孙印政:本次活动中我主要负责“在 StarRocks 中实现 ORC Chunk Writer”这个项目。ORC 文件格式是 Hadoop 生态圈中的一种列式存储格式,用于降低 Hadoop 数据存储空间和加速 Hive 查询速度,也是当前 OLAP 系统中最常用的列存格式之一。本项目考虑在 StarRocks 中实现 ORC Chunk Writer,支持将 StarRocks 的Chunk 数据写入到 ORC 文件当中。
StarRocks:在开发过程中有遇到哪些困难与挑战?你是如何克服它们的?
孙印政:我刚开始开发时对 ORC 的读写流程、Chunk 的相关函数接口还不熟悉,导致刚开始开发效率不高。后来我通过参考阅读其他类似的模块的代码,比如 Parquet Writer,逐渐熟悉起来之后开发效率也提升不少。
其次,我对 StarRocks 的测试流程也不太清楚。之后我咨询了杨老师,很快得到了反馈。了解到 StarRocks 的单元测试和基准测试流程,单元测试主要用于验证功能的正确性,而基准测试则用于评估导出性能。
StarRocks:在整个开发过程中,你有哪些开发经验可以分享给读者们?
孙印政:
项目整体的实现不难,首先要对 StarRocks 整体的向量化执行引擎有比较深入的了解。每个算子处理的最小单位是 Chunk,而 Chunk 则是一组 Tuple 以列存的形式存在内存中。向量化执行引擎相比传统的火山模型效率更高,因为可以更好的利用 CPU Cache 以及大量减少虚函数的调用。 其次,还要了解 Parquet、ORC 这类行列混存文件的存储格式,其实 Chunk 和 ORC 的 strip 的概念非常相似,只是 ORC、Parquet 是面向磁盘的,需要做序列化反序列化和高效的压缩,减少磁盘 I/O 的代价。项目实现则是以一个 Chunk 为单位,调用 ORC 提供的写接口,以一组 Tuple 为一个 batch 写入到 ORC 的 stripe 中。 其次还要熟悉 StarRocks 的 Pipeline 执行引擎,了解 StarRocks 的协程调度机制。项目要求支持异步写入 ORC,这是因为在 StarRocks 的 Pipeline 引擎里,执行 pipeline job 的用户态线程(协程)不负责磁盘/网络 I/O,而是把 I/O 任务放入全局的 I/O 线程池中,由专门的 I/O 线程去调度完成。
StarRocks:分享一下你在项目中的最大成就或突破,你对此感到最自豪的是什么?
关于开源
StarRocks:可以分享一下你的开源经历吗?
孙印政:我第一次接触开源项目是在大一,注册 GitHub 账号后像是打开了新世界的大门。最初我只是一个相对默默无闻的“小透明”,主要往 GitHub 上上传一些课程作业。我经常怀着敬畏和好奇浏览一些 Star 数比较高的项目仓库,其中我也发现了一些特别有趣的开源项目,其中有一个叫“程序员在家做饭方法指南”,我还为这个项目提过 PR。
后来,随着我对数据库的深入接触和学习,我逐渐了解到许多优秀的开源数据库项目,包括传统的 TP 数据库(如MySQL、PostgreSQL)和“新势力” AP 系统,如 ClickHouse 和 StarRocks 等。
StarRocks:在你眼中,开源是什么样的?你认为开源精神的特质是什么?在参与开源项目的过程中,你是如何展现出这些特质的?
关于孙印政与 StarRocks 社区
StarRocks:可以分享一下你是如何了解到 StarRocks 社区的?
孙印政:我第一次接触到 StarRocks 是在知乎上,偶然间发现了社区分享的技术博客。通过阅读这些博客,我深入了解了 OLAP 领域的一些前沿技术。后来,我在 B 站上观看了 StarRocks 的 Hacker Meetup,大佬们的技术分享真的让我受益匪浅,特别是关于列存实时更新、Pipeline 和向量化引擎等方面的内容,让我对这些技术方向有了更深刻的理解。
由此,我开始在 GitHub 上关注 StarRocks 的项目,经常查看新产品的特性,了解社区成员最近关注的新技术。我还尝试着解决一些“good first issue”,并向社区提交了 PR。这个过程不仅让我更深入地融入了 StarRocks 社区,也让我感受到了开源社区的活力和创新。
StarRocks:请介绍一下你眼中的 StarRocks 社区
孙印政:我觉得 StarRocks 社区的技术氛围很浓厚,记得我第一次提交 PR 时,因为对函数功能模块还不熟悉,提交的代码存在不少问题,给我 Code Review 的大佬非常详细的帮我分析问题,并且提出了一些宝贵建议,也让我充分感受到了社区的热情好客。
StarRocks:在整个开发过程中,你与导师以及社区其他成员的沟通交流的情况如何?从他们身上能学到什么?
未来展望
StarRocks:你认为参加开源社区对全日制在读计算机专业大学生有什么帮助吗?以及你自己未来的学习规划是什么呢?
孙印政:开源社区提供了实际项目的机会,帮助学生将课堂学到的理论知识应用到实际工作中。参与开源项目可以使学生接触到新的技术、工具和编码实践,培养不断学习的习惯。
希望自己能够深耕技术,记得我刚进华师大时,院长在开会时就嘱咐我们要“hands-on”,意思是多动手,多 coding,希望自己能一直保持对技术的热爱,多多实践!
StarRocks:对于即将毕业的你,对自己未来的工作有什么展望吗?
孙印政:我希望未来能够继续从事 OLAP 内核相关的开发工作,能够和大佬们一起打造极速的 AP 系统。
StarRocks:未来是否继续参加 StarRocks 社区?以及你会不会把 StarRocks 社区推荐给你身边的其他同学?为什么?
导师寄语
关于 StarRocks






