Finding nodes that own a given token/partition key

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Finding nodes that own a given token/partition key

Dan Kinder
Hey all,

In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key.

The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing.

Is there a simpler way to do this?

A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment.
Reply | Threaded
Open this post in threaded view
|

Re: Finding nodes that own a given token/partition key

Roman Tkachenko
Hi Dan,

Have you tried using "nodetool getendpoints"? It shows you nodes that currently own the specific key.

Roman

On Thu, Mar 26, 2015 at 1:21 PM, Dan Kinder <[hidden email]> wrote:
Hey all,

In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key.

The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing.

Is there a simpler way to do this?

A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment.

Reply | Threaded
Open this post in threaded view
|

Re: Finding nodes that own a given token/partition key

Adam Holmberg-2
Dan,

Depending on your context, many of the DataStax drivers have the token ring exposed client-side. 

For example,

You may not have to construct this yourself.

Adam Holmberg

On Thu, Mar 26, 2015 at 3:53 PM, Roman Tkachenko <[hidden email]> wrote:
Hi Dan,

Have you tried using "nodetool getendpoints"? It shows you nodes that currently own the specific key.

Roman

On Thu, Mar 26, 2015 at 1:21 PM, Dan Kinder <[hidden email]> wrote:
Hey all,

In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key.

The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing.

Is there a simpler way to do this?

A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment.


Reply | Threaded
Open this post in threaded view
|

Re: Finding nodes that own a given token/partition key

Dan Kinder
Thanks guys, think both of these answer my question. Guess I had overlooked nodetool getendpoints. Hopefully findable by future googlers now.

On Thu, Mar 26, 2015 at 2:37 PM, Adam Holmberg <[hidden email]> wrote:
Dan,

Depending on your context, many of the DataStax drivers have the token ring exposed client-side. 

For example,

You may not have to construct this yourself.

Adam Holmberg

On Thu, Mar 26, 2015 at 3:53 PM, Roman Tkachenko <[hidden email]> wrote:
Hi Dan,

Have you tried using "nodetool getendpoints"? It shows you nodes that currently own the specific key.

Roman

On Thu, Mar 26, 2015 at 1:21 PM, Dan Kinder <[hidden email]> wrote:
Hey all,

In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key.

The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing.

Is there a simpler way to do this?

A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment.





--
Dan Kinder
Senior Software Engineer
Turnitin – www.turnitin.com
[hidden email]