Cassandra在哪个节点上存储数据?

时间:2015-05-28 18:19:33

标签: cassandra distributed-database

是否有命令或任何方式知道哪些数据存储在Cassandra的哪些节点上?

我对卡桑德拉来说是个新手,并且在搜索这个问题时没有多少运气。

谢谢!

2 个答案:

答案 0 :(得分:5)

您可以让Cassandra通过nodetool getendpoints告诉您某个特定键所在的节点。

$ nodetool getendpoints mykeyspace tbl '8546200'
192.168.73.188
192.168.73.190

我不知道你是否正在寻找的是什么。 AFAIK还没有一种方法可以查询表或键空间中所有行的负责节点。但正如布莱克指出的那样,你的申请并不需要担心。

如果您真的想知道,可以使用分区键上的token功能查询您的表格。以下是使用Blake架构的示例:

SELECT token(partition_key),partition_key FROM tbl;

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

答案 1 :(得分: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>
> ....