Cassandra存储数据的节点是什么?

5
有没有一种命令或任何方法可以知道Cassandra上存储的数据存储在哪些节点上?
我对Cassandra还不是很熟悉,尝试过谷歌搜索这个问题但没有得到很好的解答。
谢谢!
2个回答

8
您可以使用 nodetool getendpoints 命令来查找一个特定键位于哪个节点。Cassandra 可以告诉你相应的节点信息。
$ nodetool getendpoints mykeyspace tbl '8546200'
192.168.73.188
192.168.73.190

我不知道你是否正在寻找这样的内容。据我所知,没有一种方法可以直接查询表或键空间中所有行的负责节点。但正如Blake指出的那样,你的应用程序并不需要担心这个问题。

如果你真的想找出来,你可以使用分区键上的token函数查询你的表。这里有一个使用Blake架构的例子:

SELECT token(partition_key),partition_key FROM tbl;

这将列出具有分区键的哈希令牌。然后,您可以运行nodetool ring以列出每个节点的令牌范围,并查看哪些节点负责该范围。请注意,如果您使用vNodes,则输出将非常大(默认情况下每个节点有256行)。


谢谢!这正是我在寻找的。 - user3376961

2
Cassandra使用一致性哈希算法对行的分区键进行哈希,以确定数据存储在哪里。令牌被分配给节点,分区键的一致哈希确定哪个节点将存储该行数据。 分区键是表定义或嵌套括号中PRIMARY KEY的第一部分
CREATE TABLE tbl (
partition_key INT,
clus_key TEXT,
...,
PRIMARY KEY((partition_key), clus_key);

一些关于哈希环和一致性哈希的阅读材料here。你可能正在使用vNodes,所以我建议你也在这里稍微了解一下。
在查询时,你不必担心哪个节点有什么。你的C*驱动程序将从提供的列表中选择一个协调节点,该节点将根据你的查询查找行。
如果你想查看CQLSH中查询的详细信息,请尝试打开跟踪:
> TRACING ON;
> SELECT * FROM table; 

> Tracing session: 1f6b4440-050f-11e5-ba41-672ef88f159d
> ....
> <Details about the query>
> ....

感谢您的快速回复!环和一致性哈希看起来很有道理,但是否有办法查看所有这些幕后事情。具体而言,是否有办法知道哪个哈希范围分配给每个节点以及分区键产生的哈希值(然后知道存储在哪个节点上的数据)? - user3376961
Bryce提供的答案包含以下内容:使用nodetool命令可以查询<Keyspace.Table> <PartitionKey>的endpoints;CQL中的“token()”函数。 - BeepBoop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接