【大家的项目】 Rust nom 实现的 mysql binlog 解析工具
来自《使用 nom 写 Parse》专栏系列文章的产物, 当初说写个 binlog parse 来说明 nom 如何解析二进制。没想到开了这么大一个坑。
boxercrab:https://github.com/PrivateRookie/boxercrab.git
说实话, 用 nom 解析二进制文件比解析文本还要简单, 因为套路和工具都非常清楚,让项目进展缓慢的原因是 MySQL binlog 的文档有点坑, 某些说明和 mysqlbinglog 工具解析出来的不一致,我只能尝试找别的已实现的 MySQL binlog 项目参考, 具体到某个字段时这些项目都不是很完整。迫不得已,只能去查看 mysql-server 的源码, 凭借我 hello world 级别的 c++ 连蒙带猜地尝试把所有字段都解析出来。但某些字段过于复杂或不是很重要, 我就暂时把它们放在一边。
这里不得不吐槽下,为了实现这个项目我看过 c++,c,Java,Go,Python 这五个语言的类似实现, c++一堆符号,但还是能看懂意思;c因为表现力不够,代码有些繁琐;Java 是真啰嗦, 一个方法里只写一行,那一行还是掉别的函数~;Go 看都不想看;Python 表现能力不错,但可能是作者的问题,代码有些乱。
当然,我的代码也没好到哪里去:(,为了快就用了一个大enum表示所有事件,可能很快就要重构一次,但这是人的问题,论表现能力,Rust是静态语言里独一档的。
因为时间有限,所以测试用例还不是很完善,如果测试时遇到问题可以给我提Issue,最好能附上当时的binlog文件,帮助我丰富测试用例。
最后欢迎关注我的知乎专栏 夜雨秋灯录 虽然名字挺文艺,但确实是写技术的专栏
https://zhuanlan.zhihu.com/c_208092758
本文地址:https://blog.csdn.net/u012067469/article/details/107328752