我有两个完全复制的节点。当我对包含30行的表运行查询时,cqlsh trace似乎表明它从一个服务器获取一些行,而从另一个服务器获取一些行。
因此,即使两个节点上的所有行都可用,查询也需要250ms +而不是1ms用于其他查询。
我已经在协议级别将一致性级别设置为“1”,您还需要做些什么才能使它只使用一个节点进行查询?
select * from organisation:
activity | timestamp | source | source_elapsed
-------------------------------------------------------------------------------------------------+--------------+--------------+----------------
execute_cql3_query | 04:21:03,641 | 10.1.0.84 | 0
Parsing select * from organisation LIMIT 10000; | 04:21:03,641 | 10.1.0.84 | 68
Preparing statement | 04:21:03,641 | 10.1.0.84 | 174
Determining replicas to query | 04:21:03,642 | 10.1.0.84 | 307
Enqueuing request to /10.1.0.85 | 04:21:03,642 | 10.1.0.84 | 1034
Sending message to /10.1.0.85 | 04:21:03,643 | 10.1.0.84 | 1402
Message received from /10.1.0.84 | 04:21:03,644 | 10.1.0.85 | 47
Executing seq scan across 0 sstables for [min(-9223372036854775808), min(-9223372036854775808)] | 04:21:03,644 | 10.1.0.85 | 461
Read 1 live and 0 tombstoned cells | 04:21:03,644 | 10.1.0.85 | 560
Read 1 live and 0 tombstoned cells | 04:21:03,644 | 10.1.0.85 | 611
………..etc….....
答案 0 :(得分:1)
事实证明,Cassandra版本2.0.5-2.0.9中存在一个错误,当只需要与一个节点通信时,Cassandra就更有可能在两个节点上请求数据。
升级到2.0.10或更高版本可以解决此问题。