Cassandra Datastax Driver - Connection Pool

cassandra, datastax-java-driver, java

Solution

You are right, the connection is actually in the Session, and the Session is the object you should give to your DAOs to write into Cassandra.

As long as you use the same Session object, you should be reusing connections (you can see the Session as being your connection pool).

Edit (2017/4/10) : I precised this answer following @William Price one. Please be aware that this answer is 4 years old, and Cassandra have changed a fair bit in the meantime !

Problem

I'm trying to understand the connection pooling in Datastax Cassandra Driver, so I can better use it in my web service. I have version 1.0 of the documentation. It says: The Java driver uses connections asynchronously, so multiple requests can be submitted on the same connection at the same time. What do they understand by connection? When connecting to a cluster, we have: a Builder, a Cluster and a Session. Which one of them is the connection? For example, there is this parameter: maxSimultaneousRequestsPerConnection - number of simultaneous requests on all connections to a host after which more connections are created. So, these connections are automatically created, in the case of connection pooling (which is what I would expect). But what exactly are the connections? Cluster objects? Sessions? I'm trying to decide what to keep 'static' in my web service. For the moment, I decided to keep the Builder static, so for every call I create a new Cluster and a new Session. Is this ok? If the Cluster is the Connection, then it should be ok. But is it? Now, the logger says, for every call: 2013:12:06 12:05:50 DEBUG Cluster:742 - Starting new cluster with contact points 2013:12:06 12:05:50 DEBUG ControlConnection:216 - [Control connection] Refreshing node list and token map 2013:12:06 12:05:50 DEBUG ControlConnection:219 - [Control connection] Refreshing schema 2013:12:06 12:05:50 DEBUG ControlConnection:147 - [Control connection] Successfully connected to... So, it connects to the Cluster every time? It's not what I want, I want to reuse connections. So, the connection is actually the Session? If this is the case, I should keep the Cluster static, not the Builder. What method should I call, to be sure I reuse connections, whenever possible?

Original source