使用 CQLSH 查看 Cassandra 分区

View Cassandra Partitions using CQLSH

使用 Cassandra,我如何根据我创建主键的方式查看创建了多少个分区?我一直在关注教程,它提到转到 bin/cassandra-cli 并使用 LIST 命令。但是,最新的 Cassandra 安装并没有附带这个,我已经阅读了其他在线文章,这些文章表明 cli 现在已被弃用。

我是否可以看到使用 cqlsh 创建的分区?

提前致谢!

可以只做一个 select * from table,如果查看 headers 分区键和行键的颜色不同,那么可以这样理解。

cassandra-cli 不是 与 cqlsh 相同的东西。阅读本文以获取更多信息:https://wiki.apache.org/cassandra/CassandraCli

获取分区(键)数量的最简单方法是使用 nodetool。

nodetool tablestats <keyspace>.<table>

Keyspace 和 table 是可选的。分区数列在 键数(估计) 的值下。

如果你想要行数,那么克里斯的回答是正确的。

SELECT * FROM <keyspace>.<table>;

这将显示 table 中的所有行。请记住,这是一个非常昂贵的操作,因为 Cassandra 必须从集群中具有该 table 任何数据的所有节点获取此数据。

首先,您必须调查您的 cassandra.yaml 文件,以查看当前配置的 令牌数量 。这告诉您每个节点将拥有多少个分区:

$ grep num_tokens conf/cassandra.yaml
...
num_tokens: 128
...
$ grep initial_token conf/cassandra.yaml
...
# initial_token: 1
...

如果初始令牌被注释掉,这意味着节点将在启动期间找出自己的分区范围。

接下来您可以使用nodetool ring命令检查分区范围:

$ bin/nodetool ring

Datacenter: DC1
==========
Address    Rack        Status State   Load            Owns                Token                                       
                                                                          9167006318991683417                         
127.0.0.2  r1          Down   Normal  ?               ?                   -9178420363247798328                        
127.0.0.2  r1          Down   Normal  ?               ?                   -9127364991967065057                        
127.0.0.3  r1          Down   Normal  ?               ?                   -9063041387589326037 

这显示了哪个分区范围属于集群中的哪个节点。

在上面的示例中,每个节点拥有 128 个分区范围。 -9178420363247798327-9127364991967065057之间的范围属于节点127.0.0.2.

您可以使用这个简单的 select 来告诉每一行的分区键:

cqlsh:mykeyspace> select token(key), key, added_date, title from mytable;

 system.token(key)    | key       | added_date               | title
----------------------+-----------+--------------------------+----------------------
 -1651127669401031945 |  first    | 2013-10-16 00:00:00+0000 | Hello World
 -1651127669401031945 |  first    | 2013-04-16 00:00:00+0000 | Bye World
   356242581507269238 | second    | 2014-01-29 00:00:00+0000 | Lorem Ipsum
   356242581507269238 | second    | 2013-03-17 00:00:00+0000 | Today tomorrow
   356242581507269238 | second    | 2012-04-03 00:00:00+0000 | It's good to meet you

(5 rows)

在分区范围内查找分区键会告诉您记录的存储位置。

您也可以使用 nodetool 只需一个简单的步骤即可完成同样的操作:

$ bin/nodetool getendpoints mykeyspace mytable 'first'
127.0.0.1
127.0.0.2

这表明具有分区键 'first' 的记录所在的位置。

注意: 如果某些节点已关闭,getendpoints 命令将不会列出这些节点,即使它们应该根据复制设置存储记录。