发个小开源项目: asphinxapi

周我刚发了一篇文章,讲找到了一个twisted版的sphinx。当时也只是随便看了一下,就拿出来推荐了。但是等到真正细看的时候却发现问题多多。最关键的是这玩意儿目前的版本每个client只能发起一次请求,之后的所有请求全部咯屁。由于本人比较懒,再去抓包嫌麻烦,同时又觉得看别人的代码不如自己写的快,所以干脆自己写一个得了。

既然自己写,那就想用Twisted提供的支持传统dbapi的adbapi的模式去做了。这样的好处是对外部api依赖极小,如果原版api更新了,这儿基本上也不需要改些什么。另外,总觉得像adbapi那样提供一个连接池还是很必要的,把空闲的SphinxClient存住,方便下次调用,减少创建连接和断开连接时的消耗。

所以就有了asphinxapi这么一个项目,现在和adbapi一样,使用了线程来管理连接。当然由于Python的Thread是伪的,效率其实和单线程没太大区别,不过主要只是用来生成异步调用而已。为了利用多核,最理想的方式是使用Python 2.6之后提供的multiprocessing模块,不过由于twisted官方没有提供相关支持,只能把这个先延后了,等有空了再来看怎么将两者结合起来。

另外,由于原版sphinxapi极度恶心,所有的filter、limit、group等等都是使用实例变量存储的,所以在这个版本里面,每次事务完之后多了一步回复状态的操作。我这儿是根据做了哪些操作来决定回复哪些状态的,所以这块目前和原版API还是有关联的,万一原版API对某个操作做了改动,新变动了一些实例变量,那asphinxapi就不一定保证能够成功运行了。所以目前只能保证说对coreseek 3.2(基于sphinx 0.99)提供了支持,其他版本的sphinx就保守点说暂不支持吧:(

最后,醒目标记项目地址,欢迎各位拍砖:

http://bitbucket.org/godlikejay/asphinxapi/

发表评论

评论备注:

  1. 留言时的头像是Gravatar提供的服务。
  2. By submitting a comment here you grant this site a perpetual license to reproduce your words and name/web site in attribution. So, you don't fully own your words, so to speak.