You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Jonathan Ellis <jb...@gmail.com> on 2009/07/16 02:35:59 UTC

Re: Best way to use a Cassandra Client in a multi-threaded environment?

IIRC thrift makes no effort to generate threadsafe code.

which makes sense in an rpc-oriented protocol really.

On Wed, Jul 15, 2009 at 7:25 PM, Joel Meyer<jo...@gmail.com> wrote:
> Hello,
> Are there any recommendations on how to use Cassandra Clients in a
> multi-threaded front-end application (java)? Is the Client thread-safe or is
> it best to do a client per thread (or object pool of some sort)?
> Thanks,
> Joel

Re: Best way to use a Cassandra Client in a multi-threaded environment?

Posted by Sandeep Tata <sa...@gmail.com>.
>From what I remember, in Java, the thrift client object is threadsafe
-- but if multiple threads use the same client, they will serialize on
it.
In my tests a client-per thread has worked fine for a small number of
threads . Depending on what your threads are doing and how many you
have, you may need pooling.


On Wed, Jul 15, 2009 at 5:41 PM, Ian Holsman<ia...@holsman.net> wrote:
>
> On 16/07/2009, at 10:35 AM, Jonathan Ellis wrote:
>
>> IIRC thrift makes no effort to generate threadsafe code.
>>
>> which makes sense in an rpc-oriented protocol really.
>
> hmm.. not really. you can have a webserver calling a thrift backend quite
> easily, and then you would have 100+ threads all calling the same code.
>>
>> On Wed, Jul 15, 2009 at 7:25 PM, Joel Meyer<jo...@gmail.com> wrote:
>>>
>>> Hello,
>>> Are there any recommendations on how to use Cassandra Clients in a
>>> multi-threaded front-end application (java)? Is the Client thread-safe or
>>> is
>>> it best to do a client per thread (or object pool of some sort)?
>>> Thanks,
>>> Joel
>
> --
> Ian Holsman
> Ian@Holsman.net
>
>
>
>

Re: Best way to use a Cassandra Client in a multi-threaded environment?

Posted by Joel Meyer <jo...@gmail.com>.
Thanks for the input. Sounds like pooling or thread locals is the way to go.
Cheers,
Joel

On Wed, Jul 15, 2009 at 6:57 PM, Jonathan Ellis <jb...@gmail.com> wrote:

> On Wed, Jul 15, 2009 at 8:13 PM, Ian Holsman<ia...@holsman.net> wrote:
> > ugh.
> > if this is a byproduct of thrift
>
> it is.
>
> > we should have another way of getting to
> > the backend.
> > serialization is *not* a desired feature for most people ;-0
>
> maybe not, but that's how every single database client works that I
> can think of, so it shouldn't exactly be surprising.
>
> you want multiple commands executing in parallel, you open multiple
> connections.  not a Big Deal imo.
>
> -Jonathan
>

Re: Best way to use a Cassandra Client in a multi-threaded environment?

Posted by Jonathan Ellis <jb...@gmail.com>.
On Wed, Jul 15, 2009 at 8:13 PM, Ian Holsman<ia...@holsman.net> wrote:
> ugh.
> if this is a byproduct of thrift

it is.

> we should have another way of getting to
> the backend.
> serialization is *not* a desired feature for most people ;-0

maybe not, but that's how every single database client works that I
can think of, so it shouldn't exactly be surprising.

you want multiple commands executing in parallel, you open multiple
connections.  not a Big Deal imo.

-Jonathan

Re: Best way to use a Cassandra Client in a multi-threaded environment?

Posted by Ian Holsman <ia...@holsman.net>.
ugh.
if this is a byproduct of thrift, we should have another way of  
getting to the backend.
serialization is *not* a desired feature for most people ;-0

On 16/07/2009, at 11:06 AM, Jonathan Ellis wrote:

> What I mean is, if you have
>
> client.rpc1()
> <block for rpc1 to finish>
>
> it doesn't really matter if you can do
>
> client.rpc2()
> <block for rpc1, then rpc2>
>
> from another thread or not, since it's dumb. :)
>
> On Wed, Jul 15, 2009 at 7:41 PM, Ian Holsman<ia...@holsman.net> wrote:
>>
>> On 16/07/2009, at 10:35 AM, Jonathan Ellis wrote:
>>
>>> IIRC thrift makes no effort to generate threadsafe code.
>>>
>>> which makes sense in an rpc-oriented protocol really.
>>
>> hmm.. not really. you can have a webserver calling a thrift backend  
>> quite
>> easily, and then you would have 100+ threads all calling the same  
>> code.
>>>
>>> On Wed, Jul 15, 2009 at 7:25 PM, Joel Meyer<jo...@gmail.com>  
>>> wrote:
>>>>
>>>> Hello,
>>>> Are there any recommendations on how to use Cassandra Clients in a
>>>> multi-threaded front-end application (java)? Is the Client thread- 
>>>> safe or
>>>> is
>>>> it best to do a client per thread (or object pool of some sort)?
>>>> Thanks,
>>>> Joel
>>
>> --
>> Ian Holsman
>> Ian@Holsman.net
>>
>>
>>
>>

--
Ian Holsman
Ian@Holsman.net




Re: Best way to use a Cassandra Client in a multi-threaded environment?

Posted by Jonathan Ellis <jb...@gmail.com>.
What I mean is, if you have

client.rpc1()
<block for rpc1 to finish>

it doesn't really matter if you can do

client.rpc2()
<block for rpc1, then rpc2>

from another thread or not, since it's dumb. :)

On Wed, Jul 15, 2009 at 7:41 PM, Ian Holsman<ia...@holsman.net> wrote:
>
> On 16/07/2009, at 10:35 AM, Jonathan Ellis wrote:
>
>> IIRC thrift makes no effort to generate threadsafe code.
>>
>> which makes sense in an rpc-oriented protocol really.
>
> hmm.. not really. you can have a webserver calling a thrift backend quite
> easily, and then you would have 100+ threads all calling the same code.
>>
>> On Wed, Jul 15, 2009 at 7:25 PM, Joel Meyer<jo...@gmail.com> wrote:
>>>
>>> Hello,
>>> Are there any recommendations on how to use Cassandra Clients in a
>>> multi-threaded front-end application (java)? Is the Client thread-safe or
>>> is
>>> it best to do a client per thread (or object pool of some sort)?
>>> Thanks,
>>> Joel
>
> --
> Ian Holsman
> Ian@Holsman.net
>
>
>
>

Re: Best way to use a Cassandra Client in a multi-threaded environment?

Posted by Ian Holsman <ia...@holsman.net>.
On 16/07/2009, at 10:35 AM, Jonathan Ellis wrote:

> IIRC thrift makes no effort to generate threadsafe code.
>
> which makes sense in an rpc-oriented protocol really.

hmm.. not really. you can have a webserver calling a thrift backend  
quite easily, and then you would have 100+ threads all calling the  
same code.
>
> On Wed, Jul 15, 2009 at 7:25 PM, Joel Meyer<jo...@gmail.com>  
> wrote:
>> Hello,
>> Are there any recommendations on how to use Cassandra Clients in a
>> multi-threaded front-end application (java)? Is the Client thread- 
>> safe or is
>> it best to do a client per thread (or object pool of some sort)?
>> Thanks,
>> Joel

--
Ian Holsman
Ian@Holsman.net