0

我的问题是这个主题的后续:Cassandra load balance with TokenAwarePolicy and shuffleReplicas

我遇到了一些我不理解的关于 TokenAwarePolicy 的问题。

集群配置:

  • 3个节点
  • 复制因子 = 3
  • 负载均衡策略: new TokenAwarePolicy(new RoundRobinPolicy(), false)
  • 一致性级别(读/写):一

洗牌副本故意设置为 false。但问题是我在我的应用程序中读取数据时遇到了一致性问题。例如 :

  • 插入 10 个实体
  • 使用 DB 完成一些其他操作...(插入其他实体)
  • 选择先前创建的实体:所有字段都在“SELECT”子句中给出,而不是“SELECT *”。主键存在于“WHERE”子句中。

结果:有时会获得正确数量的实体(10),但有时会减少(从 0 到 9)。

注意:

  • 我只使用 BoundStatements。
  • 我没有使用 datastax 的异步方法。
  • 我已经检查了“失败”查询中的路由键不为空,它不是。

我不得不承认我的目标是负载很重的数据库(30 个线程一起运行上述示例的 X 倍),但我仍然不明白为什么驱动程序没有查询正确的节点,给了我陈旧的数据。

感谢您的回答。

4

0 回答 0