业务背景:路由器(ce设备)场景下,各种不当操作导致重启的情况更为频繁,对于Redis以及GaussDB RD这类内存型数
据库的存在很大挑战,但又该场景又硬需求内存数据库的高性能,因此需要提供意外重启的高性能容灾方案。
个人贡献:设计并开发了定时跟意外断电数据持久化方案,支撑技术项目成功商用。
提供了数据校验功能,防止数据位跳转而恢复错误数据,同时存在一定自纠错功能,保证了数据的完整及正确
性;
引入定制化线程池,细化表锁,高并发同步至高端内存,保证能最短时间内将数据保留;
后台线程定时触发落盘,保证意外时只需增量即可保留数据;
开发了缓存读写的dml功能,提高了dml操作的性能,同时保证了重启时能从高端内存恢复增量数据;
开发了多板64实例方案,能同时启具有不同特性的GaussDB RD,适应了ce设备的新架构设计;
技术栈:线程池、并发设计、缓存读写设计、性能优化、火焰图、gdb、usocket、异步队列、crc加速、锁、信号量。
Mini Kv
业务背景:终端(手机)场景下,对简单键值对的存储有更大量更频繁的需求,安卓的sqlite实现与ios的性能差距较大,因
此欲通过改用GaussDB,为鸿蒙定制化minikv实现,提高性能。
个人贡献:重构了原先的redolog设计,为minikv场景定制化了一套redolog实现。
通过双区域的redoBuf轮询,规避落盘时的加锁设计,提高刷盘性能;
通过mmap映射及专门管理结构,原先刷进flushBuf再落盘的两次拷贝减少了一次,并具有良好的并发性,同时
也具有高性能的缩容实现;
技术栈:锁、并发、mmap、共享内存、鸿蒙、sqlite。
组件化重构
业务背景:随着与交换机、无线、手机等各类不同设备不同需求的深度合作,GaussDB RD的库过于庞大,不利于小型化设
备的小型化要求,且多需求代码的交织导致优化起来经常需要兼顾各种其他场景,因此欲通过组件化的重构,为后续小型
化、性能优化作铺垫。
个人贡献:将强互相依赖的执行层逻辑解耦成数个独立组件,极大减少了so库文件大小。
重构了序列化、反序列化逻辑,不损失多少性能前提下,减少了buf大小至50%。
技术栈:序列化、cmake、shell、datalog。
sql语言支持
业务背景:为了提供对原先安卓sqlite的兼容性,以及对开发者的友好性,除了GaussDB自有的语句格式外,也需要对经典
sql语言进行支持。
个人贡献:开发了sql语言的视图、子查询功能,记录规则并在rewrite阶段对计划树进行重写。
开发了datalog语言的状态机功能的compiler部分,对逻辑树进行处理,为执行计划树做准备。
技术栈:lex、yacc、sql、datalog、ast、二叉树、compiler。
其他
深度参与rtos各类设备(ce、ap、ac、harmony、euler等)相关操作,数据库在设备上的问题通过gdb、反汇编与日志迅
速定位并解决,抓取火焰图并分析、优化性能,由串口搭建设备后台方便操作,repo文件编译cc包等。
代码健壮,入职至今主导或设计的功能皆转测0问题、可直接上线