如何从某个节点查询Cassandra并仅从该节点获取数据?

如何从某个节点查询Cassandra并仅从该节点获取数据?,cassandra,bigdata,Cassandra,Bigdata,Cassandra使用一致性哈希来管理数据,在使用Cassandra驱动程序连接集群之后,我们连接到的节点可能会从集群中的其他节点查询以获得结果。但就我目前的情况而言,我正在对我的算法进行一些测试,我想给出一个特定的tokenRange并查询tokenRange中的数据和某个节点上的数据,如果tokenRange中的一些数据不在这个节点中,我不希望节点查询其他节点得到结果。有可能吗?如何实现? 我发现,但此解决方案仅提供客户端的连接池连接到某个节点,该节点仍将查询其他节点。使用与其他问题中链接的

Cassandra使用一致性哈希来管理数据,在使用Cassandra驱动程序连接集群之后,我们连接到的节点可能会从集群中的其他节点查询以获得结果。但就我目前的情况而言,我正在对我的算法进行一些测试,我想给出一个特定的tokenRange并查询tokenRange中的数据和某个节点上的数据,如果tokenRange中的一些数据不在这个节点中,我不希望节点查询其他节点得到结果。有可能吗?如何实现? 我发现,但此解决方案仅提供客户端的连接池连接到某个节点,该节点仍将查询其他节点。

使用与其他问题中链接的CL.ONE类似的方法

您还可以扩展该语句以包括主机和自定义负载平衡策略,以便将请求发送到包装器中的主机。扩展一个策略并覆盖<代码> MauxQuyRayPrase,类似于(未经测试的只是划痕,考虑下面的伪代码)


如果该主机不拥有数据,它仍将查询其他副本。

您是否也尝试将一致性级别设置为1?是的,我将一致性级别设置为1。我发现一个文档解释了节点的含义,我们设置策略访问的节点是契约点。谢谢您的回答,但如果我希望主机不查询其他副本,是否有任何较低级别的API可用于实现这一点?例如,我认为devops可能还需要这个函数来查找系统中是否存在错误。您需要更正cassandra中的自定义复制因子。如果向任何主机发送查询,主机将充当协调器,向相应的副本发送读取。没有办法告诉卡桑德拉不要那样做。Devops可以使用
nodetool getendpoints
查找副本,并且可以在其中一台主机上使用cqlsh并在上使用跟踪;它将准确地告诉他们查询涉及哪些主机和sstable。如果在副本上使用CL.ONE,它将只是该主机。如果使用上面的代码,您可以在定义语句时通过获取副本来实现这一点。顺便说一句,我是Cassandra devops人,这就是我经常这样做的方式(getendpoints/trace)。
class StatementSingleHostRouting(DCAwareRoundRobinPolicy):
  def make_query_plan(self, working_keyspace=None, query=None):
    if query.host:
      return [query.host]
    return DCAwareRoundRobinPolicy.make_query_plan(self, working_keyspace, query)