基于协程和异步IO的NoSQL数据库AsyncDB正式发布

GitHub链接:
GitHub – JimChengLin/AsyncDB: 协程 + 异步 + B-Tree = AsyncDB 内有清晰使用文档。

程序经过我大量的随机测试,可以放心使用。据我所知,还没有人做到跟我类似的事情。

老生常谈,Node.js为什么快?核心思想是事件驱动的异步IO。那么有没有人想过,用这样的思路去实现数据库呢?硬盘理论上也是非常缓慢的一个组件。

问题来了,如何保证数据的一致性与请求的时序性?假设,有3个请求,对于键值“foo”,进行三次修改。在这三次操作之间对“foo”进行异步读取,会得到什么样的值?

当然,可以放宽要求,采用最终结果一致性模型,只保证能得到“foo”的最终值。但有优秀得多的方案:在内存中,建立一个状态机映射。在协程间不断跳转,就是不断地从映射中,恢复预期的状态。

这样可能有些抽象。总之,我的数据库保证,一切的结果都符合正常人类的第一直觉。

协程+异步IO还有一个意想不到的优势就是请求优化。传统数据库,10个请求合并为1个大请求,显然是可以优化性能的。但在协程环境下,先发请求是有能力侦测到后发请求的,请求的优化变得没有任何意义。

在我的笔记本上跑,可以做到写4千,读1万。这个成绩简单看上去很一般,甚至有点差。但Profile后,发现瓶颈在于Python自身的缓慢,整个程序只有5%的时间花在IO上,其余都是Python自己和自己较劲了。而且,这是纯读写测试。真实生产环境下,读写的间隙,肯定会有别的事情做,异步IO的优势才发挥出来。

目前,这是最快的纯Python数据库实现。

    原文作者:「已注销」
    原文地址: https://zhuanlan.zhihu.com/p/20940736
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞