Reputation: 10463
I am trying to insert/upsert documents into couchbase database using Java JDK client 2.4.7 and couchbase server 5.0.1. The couchbase cluster is setup on AWS EC2 with 6 data nodes of type m4.2xLarge and two index/query nodes of type m4.xLarge.
The documents count(records) to be inserted into couchbase is about 6 millions. These records are group together into chunks of 10K each. 20 worker threads are performing insert/upsert operation for each chunk of 10K by iterating over each record using a for loop. The time taken for insertion of each chunk keeps on increasing over a regular interval, eventually leading to the following exception:
java.lang.RuntimeException: java.util.concurrent.TimeoutException
at com.couchbase.client.java.util.Blocking.blockForSingle(Blocking.java:77)
at com.couchbase.client.java.subdoc.MutateInBuilder.execute(MutateInBuilder.java:280)
at com.couchbase.client.java.subdoc.MutateInBuilder.execute(MutateInBuilder.java:103)
at com.onkaar.XXXXXXXX.kernel.infrastructure.data.CouchbaseSaveAccountRepository.saveBatch(CouchbaseSaveAccountRepository.java:56)
at com.onkaar.XXXXXXXX.kernel.storage.StorageTask.executeTask(StorageTask.java:38)
at com.onkaar.XXXXXXXX.kernel.storage.StorageTask.run(StorageTask.java:63)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.TimeoutException
Following are the environment configuration I am using for connecting to the couchbase cluster: Couchbase IO Pool Size = 5; Computation pool Size = 5; KV Endpoint Count = 3; KV Timeout = 5000; Connection Timeout = 10000; Worker Threads = 20;
Can you please suggest optimal configuration for this use case.
Upvotes: 1
Views: 662