2017-09-12 108 views
1

使用Cassandra,我如何根据我创建的主键创建了多少个分区?我一直在遵循一个教程,它提到去bin/cassandra-cli并使用LIST命令。然而,最新的Cassandra安装不会附带这个,我已经阅读了其他在线文章,指出cli现在已被弃用。使用CQLSH查看Cassandra分区使用Cassandra

反正有我看到使用cqlsh创建的分区吗?

在此先感谢!

+0

你从哪里找到该教程?至少3年过时了。 – Aaron

回答

3

首先,您必须调查您的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 

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

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

你可以使用这个简单的选择,告诉每一行的分区键:

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 

这告诉在那里与分区键的记录“第一”的位置。

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

0

只能做一个select * from table,如果看标题的分区和行键的颜色不同,所以可以这样算出来。

2

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

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

nodetool tablestats <keyspace>.<table> 

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

如果你想要的行数然后克里斯答案是正确的。

SELECT * FROM <keyspace>.<table>; 

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

相关问题