| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> 我的第一次实质性开源贡献——Apache IoTDB -> 正文阅读 |
|
[开发工具]我的第一次实质性开源贡献——Apache IoTDB |
前言
如何开始入手开源呢?首先可以根据自身情况选择一个开源项目进行着手,熟悉项目,在社区学习,先做些简单issue,慢慢推进,默默发育,升级打怪,最后成为Committer甚至PMC,可以hold住功能模块开发,重要bug修复,架构设计等等~。由于本人对于Java语言相对熟悉,同时因为某些原因对于时序数据库有一定了解,经过一番搜索最终选择了Apache IoTDB. 好了~废话不多说,回归正传。 入门熟悉项目一般来说,一个质量比较好的开源项目,其代码仓库的README文件或者官方文档会有比较详细的开发指南。Apache IoTDB也不例外,下面是我列的几个在这当中对我帮助比较大的几个文档。
领取issue进行开发我在Aapche IoTDB的JIRA上领取了issue,这个issue是关于一个语法功能上的扩展。 原先IoTDB在返回结果集上进行空值过滤仅支持比较粗粒度的without null all(即针对结果集中的如果所有列都为null则过滤该行)和without null any(即针对结果集中的如果所有列都为null则过滤该行)。 现在需要支持without null子句针对某几列生效,原先默认是对一行中所有列生效。 查询总体流程熟悉由于该功能总体上可以归结为查询功能的一个小模块,所以我首先先要对IoTDB在执行一条查询语句的总体流程有一个大致的全局概念,后面再慢慢深挖without null子句在其中的一些处理逻辑。其总体的处理逻辑如下:
梳理without null处理逻辑的代码位置本着以目标为导向,开始梳理原有代码中without null子句处理逻辑位置,从中获取需要改动的位置、边界以及如何改动的灵感。在原有代码中对without null语句的处理有四处,如下所示: 1.?UDTFAlignByTimeDataSet类的fillBuffer()方法
2.?RawQueryDataSetWithoutValueFilter类的fillBuffer()方法
3.?QueryDataSetUtils类的convertQueryDataSetByFetchSize()方法
4.?QueryDataSet类的hasNext()方法
解决方案初步形成通过前面对于without null处理逻辑的梳理,不难发现都是在对结果集的每一行进行判断是不是所有列都为null或者存在null. 所以其实只要我们在这些位置如果将判断null的范围限定到without null指定的那些列,至于其他列直接忽略就行。于是一个很朴素的想法就出现了,由于它每一行是按数组索引的形式遍历每一列的值,有的不包括列名信息,如果我能找到without null指定的列名在遍历的结果集的每一行的与其相应的索引的映射关系就可以了。 所以在到达上述的四个位置时,我要维护得到一个WithoutNullColumnIndexSet集合,在遍历每一个RowRecord时去判断其为null列的索引是否在WithoutNullColumnIndexSet中即可。 遇到的一些困难1. select语句后面跟的列名与without null指定的列名并不是那么简单的字符串相等关系,而且还有可能有别名信息,以及一些整合名(与from后的路径拼接、group by level等);一个比较典型的例子就是select * from xxx without null (s1);
2. 原有IoTDB的Query类型众多,而且处理逻辑并不是完全统一,要考虑一些特殊类型的查询,比如AlignByDevice、对齐时间序列等
3. 原有代码中,without null存在一个bug
提交PR在开发完成,编写自测通过、编写相应的用户使用文档后,根据上面的提交PR指南,提了PR,功能PR是有两位社区人员进行Review,根据他们提出的一些建议与问题,前前后后又改了几天,最后终于Merge了~😁。 总结本次的实践,算是对自己开源入门的一次实战。在这当中,自己熟悉了整个的一套开源开发流程,熟悉了Apache IoTDB的部分源码,同时对自己代码阅读能力有一定提升,促进了自己的代码规范,总而言之还是好处多多。当然这个Merge了不是说没有问题,他内部可能还会要进行测试,没准哪天就会通知我修bug了😅。好了,今天就说到这,希望自己可以坚持下去,持续做好开源贡献! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:51:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |