代码之家  ›  专栏  ›  技术社区  ›  BigBug

使用CQLSH查看Cassandra分区

  •  5
  • BigBug  · 技术社区  · 7 年前

    bin/cassandra-cli 并使用 LIST 命令然而,最新的Cassandra安装并没有附带这一功能,我在网上阅读了其他文章,其中指出cli现在已被弃用。

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

    3 回复  |  直到 7 年前
        1
  •  8
  •   Oresztesz    7 年前

    首先,你必须调查你的 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 属于节点 .

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

    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 命令不会列出这些节点,即使它们应该根据复制设置存储记录。

        2
  •  4
  •   Simon Fontana Oscarsson    7 年前

    与cqlsh相同。阅读以下内容了解更多信息: https://wiki.apache.org/cassandra/CassandraCli

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

    nodetool tablestats <keyspace>.<table>
    

    键空间和表是可选的。分区数列在 .

    SELECT * FROM <keyspace>.<table>;
    

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

        3
  •  0
  •   Chris Lohfink    7 年前

    可以做一个 select * from table