2012-12-10 11 views
5

Grałem z couchdb i zalecanym pakietem pythonowym "couchdbkit". Czułem, że jest trochę powolny i postanowiłem zrobić kilka pomiarów. Jeśli nie zrobiłem czegoś złego, to używanie popularnego pakietu "requests" jest ponad 10 razy szybsze niż przejście przez couchdbkit. Czemu?couchdbkit 10 razy wolniej niż żądania?

Oto skrypt rozrządu użyłem:

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) 

Na przykład uruchamiając prawdopodobnie trzeba zmodyfikować widok URL. Sprawdziłem, że te dwie wywołania powodują dokładnie te same żądania GET na serwerze. Czy to naprawdę wydaje się odnosić do wewnętrznego działania couchdbkit ?!

+0

Couchdbkit używa programu Restkit (https://github.com/benoitc/restkit), można go porównać i żądać bezpośrednio, aby sprawdzić, czy jest to wąskie gardło. – mwhite

+0

Mam również dyskusję na liście użytkowników couchdb o problemie. Benoit zamierza to sprawdzić. – hpk42

Odpowiedz

Powiązane problemy