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