开源之夏 ×NebulaGraph×Ngbatis:从新手到入门的经验自述

自我介绍

大家好,我叫刘晓阳:wave:t2:目前在郑州航空工业管理学院人工智能专业读大三。主要的技术栈围绕后端开发/自动化测试/LLM展开,平时写的比较多的语言是Java/Python,爱好是足球/开源/电影/听歌。在今年的开源之夏活动中,有幸中选了NebulaGraph社区的项目"基于 NgBatis,实现从实体对象出发完成数据直查",负责项目的开发任务并已顺利结项,还被评上了"最快进步奖"~:smiley:

初闻开源之夏

起初,开源对我来说就像是一片神秘而广阔的未知领域。我听闻过它的大名,知晓其与代码、技术共享相关,却只略懂皮毛。仅知道开源意味着代码是公开的,大家可以共同参与改进,但对于开源的协作流程、社区运作机制以及如何从海量的开源项目中找到适合自己的方向,我完全没有清晰的概念。后来,从网上大佬的分享中了解到可以从参加一些开源活动开始,比如Google Summer of Code、中科院主办的开源之夏等。俗话说的好,机会是留给有准备的人的,于是我就早早地关注2024年开源之夏活动的时间线,从网上学习别人参加过的经验。

与NgBatis结缘

当开源之夏官网上公布项目之后,我首先是根据我目前所掌握的技术栈进行筛选,接着把筛选后的项目都简单了解一下,选出几个感兴趣的且有信心完成的项目。

当时选项目的时候,我刚好学习过MyBatis源码不久,所以看到NgBatis很惊喜,有种相见如故,命中注定我俩有缘的感觉!:grin:接着就先开始了对NebulaGragph图数据库的探索,跟着官方文档本地部署了我的图库,学习了图库的架构设计、基本概念以及nGQL语句等,参考社区里的帖子对图库进行操作,这简直像打开了新世界一样!好玩!后来也关注了NebulaGragph的公众号,进了交流群,感受到了社区的氛围非常nice!:hugs:再加上跟导师的交流和看社区对梵老师专访的文章,就更加吸引我了,这个导师好优秀,好想跟她多交流一起做项目!:smiling_face_with_three_hearts::smiling_face_with_three_hearts::smiling_face_with_three_hearts:

:point_down:这是社区寄来的小周边,超喜欢~

对于熟悉Ngbatis项目,我是将它的源码拉到本地,连接上本地docker部署的图库,运行demo里的tests,一步步debug熟悉整体的框架设计和核心的代码流程,遇到问题先独立思考,去社区里或者交流群里检索下有没有相关的解决办法,解决不了再去请教群里的老师们。

初步了解项目源码以后,在申请阶段,最好可以完成项目的一些good first issues在社区活跃活跃,之后再勇敢地提交一个PR!说起来我在NgBatis的第一个PR,其实是个小乌龙。但也正是这个小乌龙,和社区的大佬——大叶老师有了更多的交流,因此认领了一个小任务,在coding完成之后提交了PR,最后合入了主分支,现在我还记得当时的我有多激动!这里要特别感谢大叶老师对我的PR进行review!:heart:

:point_down:学校宿舍晚上断电差点没有提交成功,好险~

:point_down:某天得知中选之后,开心疯了!

项目历程

在开源之夏的实践中,我的项目围绕 NgBatis 框架的拓展 展开,具体目标是:

基于已有的 NgBatis 开源框架,用另一种方式来实现数据查询等操作。也就是对于图数据的操作从原来的利用编写接口的方式,扩展出直接从实体对象出发来完成对图数据的增删改查,让框架在使用上体现出图的特点,用更贴合图的思维方式来操作数据。(引自秋梵老师的导师专访)

项目初期,我深入研究了 NgBatis 的代码库及其与 NebulaGraph 图数据库的结合机制,重点学习了 nGQL 语句的用法。导师的技术博客很好地帮助我快速地理清了框架的整体架构和设计思路,同时,我花费两周时间调研了主流 OGM 框架的实现方式,为“实体直查”功能的设计奠定了坚实基础。

在明确初步实现思路后,我提出了一种方案:通过继承实体基类并结合自定义注解,实现动态拼接 nGQL 语句,从而高效操作图数据。在与导师多次线上会议讨论后,我针对框架的设计合理性、安全性和用户体验持续优化方案。例如,优化框架的抽象层次以提升易用性,增强日志输出的一致性以方便调试,以及改进安全机制以规避潜在的 nGQL 注入风险。在每次调整后,我都会将修改结果和新的想法与导师进一步探讨,逐步完善功能细节。

经过多轮迭代和细化,在导师的悉心指导和技术建议下,我完成了核心功能的设计和实现,解决了性能优化、安全性提升等关键问题。最终,“实体直查”功能成功集成到 NgBatis 主分支中,成为框架的一大亮点。

回顾整个开发历程,从需求分析到功能设计,再到代码优化和测试,我深刻体会到开源项目开发的严谨性和协作性。这段实践不仅让我收获了丰富的技术经验,更让我更加坚定了参与开源社区的信念。

目前该功能已在Ngbatis的最新版本中发布~:tada:

NgBatis v2.0.0-beta 发布 - ORM 向 OGM 进化,实体直查功能带来全新体验

收获与感悟

通过这次开源之夏的实践,我不仅在技术上取得了显著提升,还在项目开发、问题解决等方面积累了宝贵的经验。参与开源的过程其实比想象中要简单得多。无论是修复代码中的拼写错误、补充文档内容,还是参与问题讨论,这些看似微小的贡献,都是对开源社区的有力支持。而深入到核心开发,比如设计和实现一个新功能,虽然存在一定的挑战,但只要掌握正确的方法,每个人都可以找到自己的角色,为开源生态添砖加瓦。

参与开源的第一步,是熟悉并深入理解项目。在这一过程中,我切身体会到开源之夏带来的多重收获:一是通过参与项目,提升了工程实践能力,进一步巩固了技术基础;二是丰富了个人作品集,为未来就业增加了竞争优势;三是培养了协作能力,提前适应了企业级团队的沟通与协作模式;四是拓展了人际网络,通过开源活动结识了许多优秀的开发者,开阔了视野,也启发了新的思考。

这段经历让我深刻感受到,开源不仅是技术实践的平台,更是一个分享与成长的社区。它让我对开源的理解更深、热爱更浓,也更加坚定了未来继续投身开源的信念。

最后,我想衷心感谢我的导师秋梵老师在项目中的耐心指导:heart:从方案设计到细节优化,每一次讨论都让我获益匪浅,也让我认识到技术背后的严谨与深度。同时,也要感谢开源之夏的平台和 NebulaGraph 社区的支持与鼓励。正是社区的开放与包容,让我有机会深入其中并取得成长。未来,我希望继续为开源社区贡献自己的力量,与更多优秀的开发者携手同行,一起探索更多有趣的技术!

:point_down:开源之夏寄来的结项小礼物~还差我个实体证书hhh

5 个赞

超棒!

欢迎晓阳成为 NebulaGraph 社区的新力量~:clap:

好看,是瓷杯?

1 个赞

是滴~contributor 的专属杯