我目前已经实现好了NebulaGraph的rust客户端部分与OpenDAL调用rust客户端连接NebulaGraph的功能。NebulaGraph的rust客户端的功能作为客户端还尚不完善,但是也足以支持OpenDAL通过字符串类型存取一些文件了。

对于NebulaGraph服务,OpenDAL将支持get,set,delete和scan操作(当然rename也是理论上可行的,但是我没找着impl Access同时又不用重复写write,read这些方法的例子,rust水平有限😭,我看见其他的db也没有rename功能,所以先暂且放弃)

OpenDAL将支持存取1MB大小以下的文件,由于NebulaGraph原生没有Blob类型,所以只能用字符串类型暂时替代,但一般的二进制数据转字符串会有随机的转义字符和引号,NebulaGraph是完全没有处理的,因此这些符号会直接导致nGQL语法解析失败。官方的建议是存小字符串自己转义,存大文件虽然奇怪但是建议直接使用Base64方便快捷(他们论坛上和负责人都是这么建议的),我正是这么干的😇这样确实会造成4/3的额外空间占用,而且稍微有点不太符合OpenDAL希望自己能访问到的数据其他客户端也能访问到的原则,但是即使手动处理转义字符和引号不仅难说确保所有情况都覆盖,使得插入数据以及解析数据时不报错,而且解析数据也不是拿到手就是原文件,还得再转义转回来。总之Base64确实算是比较方便且通用的方案了。

NebulaGraph也有未来支持Blob类型的想法(也是论坛的帖子和负责人都说过的,帖子是20年的,负责人是我问了刚说的),那么到那个时候我们直接移除代码里Base64.encode和decode就可以接着用了😇

OpenDAL的test::behaviour测试我已经全部pass了,相关的PR最近几天我发布rust-nebula客户端crate后就会提:)

Reply via email to