在Cassandra中通过IN操作符查询同一令牌范围内的多个分区键的开销是多少?

2jcobegt  于 10个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(81)

通常不建议在Cassandra中使用不同的分区键查询多行,因为这些查询可能会影响多个节点。但是,查询放置在同一令牌范围内的多个分区键并不清楚(* 意味着它们存储在相同的节点上 *)。
如果应用程序保证使用来自相同令牌范围的分区键,并且负载平衡策略将查询路由到包含该令牌范围的节点,并且复制因子为1,那么是否建议在多个分区键上使用IN运算符?与异步执行每个分区键的单独CQL查询相比,开销是多少?换句话说,这个查询会被推荐吗(假设id是分区键,并且所有提供的分区键都属于相同的令牌范围)?

SELECT column1, column2 FROM table WHERE id IN(1,2,3,4,5)

字符串
还是建议使用以下5个查询?

SELECT column1, column2 FROM table WHERE id=1
SELECT column1, column2 FROM table WHERE id=2
SELECT column1, column2 FROM table WHERE id=3
SELECT column1, column2 FROM table WHERE id=4
SELECT column1, column2 FROM table WHERE id=5


声明者:我问这个问题是因为我确实看到Cassandra 4使用IN操作符在位于同一节点(相同令牌范围)的多个分区键上的性能提高了20%,如果与我异步地为每个分区键执行单独的CQL查询的情况相比。也就是说,通常人们建议对不同的分区键执行单独的CQL查询,我想了解一下主要原因。

noj0wjuj

noj0wjuj1#

人们推荐使用异步查询的主要原因是因为在低容量下查询可能会很好。但是,随着请求量的增加,您很可能会遇到问题。这是因为在某些时候协调器在执行分散收集时陷入困境(这是跨分区查询的情况,因为分区可能位于集群中的不同节点上)。随着时间的推移,随着数据量的增加、容量的增大等,这种分散的收集将开始导致超时,因为协调器正忙碌从几个不同的节点检索数据。
相反,如果您执行一个异步查询,协调器会响应,然后准备好服务下一个请求。这对协调器来说要容易得多,而且不太可能导致超时。

相关问题