Java client slow performance on get


#1

Hi, I am trying to upgrade the JAVA SDK from 1.x to 2.5.8.

But I found that the performance on batch operation is very bad on 2.5.8.

I’m using Observable for 2.5.8 and asyncGetBulk() for 1.x.

Using the same stress test program, the CPU loading and response time on using 2.5.8 is very much higher than the old one.

I’m batch getting ~2000 keys per request, with 4 requests per second. Using 1.x passed with success, while 2.5.8 starts to fail on around 500 requests.

May I know how can I keep the performance as asyncGetBulk()? As this function has been removed in 2.5.8.

Thanks a lot!


#2

I’m not sure of your environment, but if it’s just on the local machine, you may have different results with more mixed workloads or larger classes of hardware. One difference in 2.x from 1.x is that the threadpool for computation/completion is by default separate, where it was optionally separate on 1.x. This requires more thread synchronization, but with a more diverse workload it can give you more even resource usage. You can control this with callbacksOnIoPool as described in the settings.

Beyond that, I wouldn’t expect a huge difference. Can you post a couple of gists as samples and maybe @subhashni or @graham.pople or @daschl might have a suggestion?