2012-12-10 9 views
5

私はcouchdbと推奨される "couchdbkit" pythonパッケージで遊んでいました。私はそれが少し遅いと感じ、いくつかの測定をすることに決めました。私が何か間違っていないなら、一般的な "要求"パッケージを使うことはcouchdbkitを使うよりも10倍以上高速です。どうして?couchdbkitはリクエストより10倍遅いですか?

from time import time as now 
from pprint import pprint 

class Timer: 
    def __init__(self): 
     self.current = now() 

    def __call__(self, msg): 
     snap = now() 
     duration = snap - self.current 
     self.current = snap 
     pprint("%.3f duration -- %s" %(duration, msg)) 

def requests(num): 
    t = Timer() 

    import requests 
    for i in range(num): 
     r = requests.get("http://127.0.0.1:8001/releases/_design/access/_view/yieldlinks") 
     assert r.status_code == 200 
     r.json # make sure the json is there 
    t("requests: %d" % (num,)) 

def couchdbkit(num): 
    import couchdbkit 

    t = Timer() 
    server = couchdbkit.Server("http://127.0.0.1:8001") 
    releases = server.get_db("releases") 
    for x in range(num): 
     for x in releases.view("access/yieldlinks"): 
      pass 
    t("couchdbkit: %d" %(num,)) 

num = 500 
requests(num) 
couchdbkit(num) 

をあなたはおそらくビューのURLを変更する必要がある例を実行するために:ここで

は私が使用されるタイミングスクリプトです。私は2つの呼び出しがサーバー上でまったく同じGET要求を引き起こすことを確認しました。だから、これは本当にcouchdbkitの内部作業に関係しているようですね!

+0

CouchdbkitはRestkit(https://github.com/benoitc/restkit)を使用しています。これを比較して、それがボトルネックかどうかを直接確認することができます。 – mwhite

+0

私はcouchdb-usersのリストについても議論しています。 Benoitはそれを調べます。 – hpk42

答えて

2

ので、私は最終的には問題は、それが実際にこの1と同じだが見つかりました:

要するに

CouchDB/MochiWeb : negative effect of persistent connections

、追加:

[httpd] 
socket_options = [{nodelay, true}] 

するPERF差を解消します - ファクトcouchdbkit/restkitに今や少し速いです。

関連する問題