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

Cassandra使用一致的哈希来管理数据,在我们使用Cassandra驱动程序连接集群之后,我们连接的节点可以从集群中的其他节点进行查询以获得结果 . 但对于我目前的情况,我在这个节点中,我不希望节点查询其他节点得到结果 . 是否可能以及如何实现它?我发现Cassandra Python driver: force using a single node但是这个解决方案只提供客户端的连接池连接到某个节点,该节点仍然会查询其他节点 .

回答(1)

2 years ago

在其他问题中使用WhiteListRoundRobinPolicy和CL.ONE之类的链接 .

您还可以扩展Statement以包括主机和自定义负载 balancer 策略,以将请求发送到包装器中的主机 . 扩展策略并覆盖 make_query_plan ,类似于(未经测试的只是从头开始,考虑遵循伪代码)

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)

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