metadata.gettokenranges()是否返回cassandra中所有节点的所有标记范围?

0tdrvxhp  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(365)

我浏览了cassandra中使用vnodes的每个节点的令牌范围?。在这个实现中,我们获取所有主机并获取这些主机中的令牌范围,以获取所有节点上的所有令牌范围。
但是,在我的情况下,我使用以下代码:

public static synchronized List<Object[]> getTokenRangesAcrossNodes(
      final String node, final Integer port, final String userName, final String password) {

    if (cluster == null) {
      connect(node, port, userName, password);
    }
    Metadata metadata = cluster.getMetadata();
    return unwrapTokenRanges(new ArrayList<>(metadata.getTokenRanges()));
  }

在上面 connect() 功能 node 具有所有逗号分隔的cassandra主机字符串,我使用cluster.builder().addcontactpoints()创建会话。
我的问题是:
metadata.getTokenRanges() 提供所有主机上的所有令牌范围?还是需要获取所有主机并获取每个主机的令牌范围?
在所有节点上获取令牌范围是否与给定节点的令牌范围不同 keyspace ?
Cassandra版本:3*

iswrvxsc

iswrvxsc1#

每个主机通过gettokens()公开其主令牌。
gettokenranges()返回定义环中数据分布的标记范围。
您还可以选择使用metadata.gettokenranges(string keyspace,host host),它返回在给定主机上为特定键空间复制的令牌范围。
检查以下链接:
元数据
host.gettokens()
metadata.gettokenranges(字符串键空间,主机)
metadata.gettokenranges()
这个例子也许会有帮助。

相关问题