使用Cassandra,我如何根据我创建的主键创建了多少个分区?我一直在遵循一个教程,它提到去bin/cassandra-cli
并使用LIST
命令。然而,最新的Cassandra安装不会附带这个,我已经阅读了其他在线文章,指出cli现在已被弃用。使用CQLSH查看Cassandra分区使用Cassandra
反正有我看到使用cqlsh创建的分区吗?
在此先感谢!
使用Cassandra,我如何根据我创建的主键创建了多少个分区?我一直在遵循一个教程,它提到去bin/cassandra-cli
并使用LIST
命令。然而,最新的Cassandra安装不会附带这个,我已经阅读了其他在线文章,指出cli现在已被弃用。使用CQLSH查看Cassandra分区使用Cassandra
反正有我看到使用cqlsh创建的分区吗?
在此先感谢!
首先,您必须调查您的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
命令将不会列出这些节点,即使它们应该根据复制设置存储记录。
只能做一个select * from table
,如果看标题的分区和行键的颜色不同,所以可以这样算出来。
cassandra-cli是不是与cqlsh相同。请阅读本文以获取更多信息:https://wiki.apache.org/cassandra/CassandraCli
获取分区(键)数的最简单方法是使用nodetool。
nodetool tablestats <keyspace>.<table>
Keyspace和桌子是可选的。分区数量列在的数值下。键数(估计)。
如果你想要的行数然后克里斯答案是正确的。
SELECT * FROM <keyspace>.<table>;
这将显示表中的所有行。请记住,这是一个非常昂贵的操作,因为Cassandra必须从集群中的所有节点获取该数据,该节点具有该表的任何数据。
你从哪里找到该教程?至少3年过时了。 – Aaron