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

时间:2018-05-22 09:33:08

标签: cassandra bigdata

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

1 个答案:

答案 0 :(得分:0)

使用与其他问题相关联的WhiteListRoundRobinPolicy和CL.ONE。

您还可以扩展Statement以包含主机和自定义负载平衡策略,以将请求发送到包装器中的主机。扩展策略并覆盖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)

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