2012-12-10 32 views
5

Tôi đang chơi với couchdb và gói python "couchdbkit" được đề xuất. Tôi cảm thấy nó hơi chậm và quyết định thực hiện một số phép đo. Nếu tôi không làm điều gì đó sai, thì việc sử dụng gói "yêu cầu" phổ biến nhanh gấp 10 lần so với việc đi qua couchdbkit. Tại sao?couchdbkit 10x chậm hơn yêu cầu?

Đây là kịch bản thời gian tôi được sử dụng:

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) 

Đối với chạy ví dụ bạn có thể cần phải sửa đổi URL xem. Tôi đã xác minh rằng hai lời gọi gây ra các yêu cầu GET chính xác giống nhau trên máy chủ. Vì vậy, điều này thực sự có vẻ liên quan đến hoạt động bên trong của couchdbkit ?!

+0

Couchdbkit sử dụng Restkit (https://github.com/benoitc/restkit), bạn có thể so sánh nó và yêu cầu trực tiếp để xem đó có phải là nút cổ chai hay không. – mwhite

+0

tôi cũng đang thảo luận về danh sách người dùng couchdb về vấn đề này. Benoit sẽ xem xét nó. – hpk42

Trả lời

2

Vì vậy, cuối cùng tôi thấy vấn đề này, nó thực sự giống như này:

CouchDB/MochiWeb : negative effect of persistent connections

Nói tóm lại, nói thêm:

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

giải quyết sự khác biệt về hiệu suất - trong thực tế couchdbkit/restkit bây giờ nhanh hơn một chút.

Các vấn đề liên quan