When executing a normal query, the call returns only after the query completes. When you call the execute()
method of a session instance to execute a query, the call returns after doing I/O to the cluster, waiting for the cluster to execute query and getting a response from the cluster. Meanwhile, the querying thread is idle and blocked. It can't execute other queries.
Consider the following example where you're trying to load a lot of user data. We could execute the code in a loop thousands of times, but each iteration waits for session.execute()
to finish:
public ResultSet insertUserData(/* Some user data) { PreparedStatement insertUser = ...; // Prepare the statement BoundStatement bs = ... ; // Bind the statement return session.execute(bs); // Execute the query }
A client executes insertUserData()
in a loop. While waiting for the method to complete, the client won't execute other queries on the cluster. Only one node in the cluster will be servicing client requests...