PyKV小记(未完待续)

PyKV是用python仿照着redis实现的一个简单的key-value形的数据库,使用zeroMq完成client端和server端的通信,通过python的自省来完成对操作条件的解析,从而支持简单的增删查改。项目地址在这里

ZMQ

zeroMq是一个为可伸缩的高性能异步消息库。它提供了类似于消息队列的功能,却并不是一个消息队列,工作在socket之上,传统的消息队列之下·。它提供了在传统socket上加了魔改效果有多种常用工作模式的套接字。

相对于原生的socket,zeroMq有以下几个特点:

- 使用简单。
- 支持多种通信模式,比如在本项目中使用的请求响应模式,此外还有在分布式系统中常用的发布/订阅模式。
- 高性能。zeroMq和其他消息队列的性能对比见[这里](http://mikehadlow.blogspot.com/2011/04/message-queue-shootout.html)。

想了解更多关于zeroMq的可以看它的官网,见这里

使用实例

在客户端建立同server的链接,数据库名称db,建立三个空的query

1
2
3
4
client = client_factory("db")
quer1 = Query()
quer2 = Query()
quer3 = Query()

查询

1
client.search(quer1.name == "he")

删除

1
2
client.remove(quer2.name == "he")

插入

1
client.insert([{"name":"he"}])

更新

1
client.update("delete", quer3.name == "he")

更多的使用实例后面会更新。

实现

其实实现反而没有什么好说的,跟一开始设想的仿照redis来实现的目标差的有点远。而且也是通过python的getattr自省和重载操作符来实现的条件的解析,算是取巧避开了实现类似于SQL的解析部分,这样大大减轻的程序的包袱。

存储上一开始准备直接存在内存中,后面又在纠结是不是应该改成json好支持持久化,最后干脆两个都支持,将选择权留给配置,这样实现起来也很方便。

没有做性能上的测试,主要还是不是很满意,后面应该会有大的改版,完成之后在做性能测试吧。

既然还要修改的话,就把这篇的名字改成未完待续吧。

Reference

ZMQ官网

[ZMQ性能测试](http://mikehadlow.blogspot.com/2011/04/message-queue-shootout.html