是否有命令或任何方法可以知道哪些数据存储在 Cassandra 的哪些节点上?
我对 Cassandra 很陌生,并且在谷歌上搜索这个问题时运气不佳。
谢谢!
是否有命令或任何方法可以知道哪些数据存储在 Cassandra 的哪些节点上?
我对 Cassandra 很陌生,并且在谷歌上搜索这个问题时运气不佳。
谢谢!
您可以使用nodetool getendpoints让 Cassandra 告诉您特定密钥在哪个节点上。
$ nodetool getendpoints mykeyspace tbl '8546200'
192.168.73.188
192.168.73.190
我不知道这是否是你要找的。AFAIK 没有办法全面查询表或键空间中所有行的负责节点。但正如 Blake 所指出的,您的应用程序并不真正需要担心这一点。
如果你真的想知道,你可以使用token
分区键上的函数来查询你的表。这是使用 Blake 模式的示例:
SELECT token(partition_key),partition_key FROM tbl;
这将列出带有分区键的散列令牌。然后您可以运行 anodetool ring
列出每个节点的令牌范围,并查看哪些节点负责该范围。请注意,如果您使用 vNodes,您的输出将非常大(默认情况下,每个 256 行)。
Cassandra 在行的分区键上使用一致的散列来确定数据的存储位置。令牌被分配给节点,分区键的一致哈希决定了哪个节点将存储该行。
分区键是表定义或嵌套括号中 PRIMARY KEY 的第一部分
CREATE TABLE tbl (
partition_key INT,
clus_key TEXT,
...,
PRIMARY KEY((partition_key), clus_key);
一些关于环和一致哈希的阅读。您可能正在使用vNodes,所以我也会在这里阅读一些内容。
在查询时,您不必担心哪个节点有什么。您的 C* 驱动程序将从提供的列表中选择一个协调器节点,该节点将根据您的查询查找行。
如果您想查看有关 CQLSH 中查询的详细信息,请尝试打开跟踪:
> TRACING ON;
> SELECT * FROM table;
> Tracing session: 1f6b4440-050f-11e5-ba41-672ef88f159d
> ....
> <Details about the query>
> ....