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 ?!
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
Mam również dyskusję na liście użytkowników couchdb o problemie. Benoit zamierza to sprawdzić. – hpk42