我的问题是这个主题的后续: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 倍),但我仍然不明白为什么驱动程序没有查询正确的节点,给了我陈旧的数据。
感谢您的回答。