cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Avi Kivity <...@scylladb.com>
Subject Re: execute is faster than execute_async?
Date Thu, 12 Dec 2019 10:19:38 GMT

On 12/12/2019 06.25, lampahome wrote:
>
>
> Jon Haddad <jon@jonhaddad.com <mailto:jon@jonhaddad.com>> 於 
> 2019年12月12日 週四 上午12:42寫道:
>
>     I'm not sure how you're measuring this - could you share your
>     benchmarking code?
>
>         s the details of theri?
>
>
> start = time.time()
> for i in range(40960):
>     prep = session.prepare(query, (args))
>     session.execute(prep) # or session.execute_async(prep)
> print('time', time.time()-start)
>
> Just like above code snippet.
> I almost cost time by execute_async()   more than normal execute().
>

I think you're just exposing Python and perhaps driver weaknesses.


With .execute(), memory usage stays constant and you suffer the round 
trip time once per loop.

With .execute_async(), memory usage grows, and if there is any algorithm 
in the driver that is not O(1) (say to maintain the outstanding request 
table), execution time grows as you push more and more requests. The 
thread(s) that process responses have to contend with the request 
issuing thread over locks. You don't suffer the round trip time, but 
from your results the other issues dominate.


If you also collected responses in your loop, and also bound the number 
of outstanding requests to a reasonable number, you'll see execute_async 
performing better. You'll see even better performance if you drop Python 
for a language more suitable for the data plane.


Mime
View raw message