« 写了一个 lua bson 库 | 返回首页 | 重写了 skynet 中的 socket 库 »

MongoDB lua driver

唔,我知道有人已经做了 MongoDB 的 lua driver ,比如这个 。但我不想仅仅是对 C++ API 的封装,而想从协议层做起,这样日后可以方便改为异步模型,也好整合到 skynet 中去。

这里还有一份纯 Lua 的实现,是从协议层做的封装。但有几个问题,一是依赖 lua-socket 库,二是纯 lua 实现不如 C 库性能好,三是特性没有支持完整。

曾经想在 C Driver 的基础上做封装。做的过程中发现 c driver 代码质量不高,且特性支持不完整,最终我考虑自己从协议层开始重新做一份。

mongo 的文档不算完整,我感觉协议定义也不是很严谨。所以在实现过程中遇到许多麻烦。原本认为一天能写完的,结果做了三天。今天终于可以发布一个初步的版本了。

https://github.com/cloudwu/lua-mongo

制作这个 driver 的思路是,把 bson 的编解码部分完全独立开,放到另一个项目 lua-bson 中。

这样,以后为 skynet 做特别版可以更灵活一些。因为 skynet 需要一个异步模型,bson 包的打包过程和 mongo 的 driver 可能在不同的 lua state 完成。

性能相关的部分我想放到 C 代码中完成,但 C 代码只提供最基本的 api ,功能性需求用 lua 实现即可。

目前只是一个初步的东西。因为我几乎没有用过 MongoDB ,对它的了解仅限于对协议的研究。希望有熟悉 mongo 的同学可以协助我来完善这个 driver 。

Comments

终于把代码嵌到项目里面了, 不过插入一个简单的数据都特别慢, 只有25条/秒, 而原来mysql可以一秒执行几百条, 我再看看是哪里的问题

你的例子 搞了2天 都跑步起来啊
真坑啊

hi,基于你的代码,我们适配了ngx_lua模块

@过海漂

不要用连 C99 都不支持的落后编译器. btw, inline 在上个世纪就写入 C 语言标准里了.

今天对这个感兴趣,下载下来编译
结果一大堆错误,我自认还算有经验
既然提交到github上,让人们公开使用,那还是要用心点,保证一定的质量
,简单说,就是 inline是c++里的工程里的bsoon.c默认是按c方式编译,感觉不专业,不符合云风大侠的一贯作风

mongodb-c-driver 代码质量还好了,至少有了不是,虽然文档确实少,且用的也很少。

你做 skynet 想干嘛,难道不是0mq 的 req-rep 模式可以替代的?

代码这个的东西真的很折磨人!

这些代码真的很折磨人!

您到底要做什么啊。

Post a comment

非这个主题相关的留言请到:留言本