cassandra,在“in”中有很多参数

lndjwyie  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(220)

我正在用cassandradb编写一个java应用程序。我在“in”子句中提出了一个包含大量(超过100000个)参数的请求:

SELECT country, gender FROM persons WHERE person_id IN (1,7,18, 34,...,)

但我认为,在“in”中加入一些参数看起来很糟糕。
我也可以提出很多这样的请求(再次超过100000次迭代):

for (Integer id : ids) {
    ResultSet res = session.execute(preparedStatement(id));
    //processing with data from Cassandra
}

也不见得好,太久了。
在我的案例中有什么api、模式可以遵循吗?
谢谢您

kuuvgm7e

kuuvgm7e1#

如果 person_id 如果是分区键(从查询中可以看到),那么使用in将导致很多问题,因为它将使需要从其他节点收集结果的协调器节点过载。
在这种情况下,最有效的方法是激发单个请求,但通过 executeAsync ,因此它们将被发送到不同的节点。在这种情况下,您需要控制已发送的请求数,例如通过计数信号量,另外,您可能需要对控制飞行中请求数的连接池参数进行计时:https://docs.datastax.com/en/developer/java-driver/3.6/manual/pooling/

相关问题