2016-08-18 4 views
0

Ich möchte eine Reihe von Schlüsseln aus einer Cloudant db abrufen. Ich habe einige Wege ausprobiert. Custom_result führt blitzschnell im Vergleich zu anderen Methoden. Kann jemand erklären warum?Benchmarking Retrieval in Cloudant

from cloudant import cloudant 
import json 
import time 
from cloudant.result import Result,ResultByKey 


with open('credentials.json') as f: 
    cred = json.load(f) 

with cloudant(str(cred['credentials']['username']),str(cred['credentials']['password']),url=str(cred['credentials']['url'])) as client: 
    my_database = client['my_database'] 

    #Using POST 
    payload = {"keys": ["012","345"]} 
    end_point = '{0}/{1}'.format(client.server_url, 'my_database/_all_docs') 
    params = {'include_docs': 'true'} 
    start = time.time() 
    response = client.r_session.post(end_point, data=json.dumps(payload), params=params) 
    end = time.time() 
    print end-start 


    #using custom_result 
    start = time.time() 
    result = my_database.custom_result(include_docs=True,keys=["012","345"]) 
    end = time.time() 
    print end-start 


    #using all_doc 
    start = time.time() 
    result = my_database.all_docs(include_docs=True,keys=["012","345"]) 
    end = time.time() 
    print end-start 


    #using iteration 
    keys=["012","345"] 
    start = time.time() 
    result=[] 
    result_collection = Result(my_database.all_docs, include_docs=True) 
    for i in range(len(keys)): 
     result.append(result_collection[ResultByKey(i)]) 
    end = time.time() 
    print end-start 

Meine Ausgabe ist wie folgt:

0.426064968109 
4.10079956055e-05 
0.409541845322 
0.819295167923 

Kann mir jemand sagen, warum custom_result so schnell durchführt?

Antwort

1

Die Funktion database.custom_result() erstellt nur die Instanz cloudant.result.Result, von Cloudant werden keine Ergebnisse zurückgegeben. Sie können versuchen, es auf diese Weise zu testen, End-Start wird die ganze Zeit sein, die Sie Antwort von Cloudant erhalten.

start = time.time() 
with database.custom_result(include_docs=True) as result: 
    data = result[:] 
end = time.time() 
print end-start