java中按主键列表的cassandra查找

i7uaboj4  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(440)

我正在实现一个功能,需要通过主键列表来查找cassandra。
下面是一个示例数据,其中id是主键

mytable
id          column1
1           423
2           542
3           678
4           45534
5           435634
6           2435
7           678
8           4564
9           546

我的大多数查询都是按id查找的,但对于某些特殊情况,我希望获得id列表的数据。我目前的做法如下:

public Object fetchFromCassandraForId(int id);

int ids[] = {1, 3, 5, 7, 9};
List<Object> results;
for(int id: ids) {
  results.add(fetchFromCassandraForId(id));
}

这将导致对cassandra发出多个网络调用,是否有可能以某种方式对其进行批处理,因此我想知道cassandra是否支持通过id列表进行快速查找

select coulmn1 from mytable where id in (1, 3, 5, 7, 9);

? 如有任何帮助或指点,将不胜感激?

1bqhqjot

1bqhqjot1#

如果 id 是完整的主键,那么cassandra支持这一点,尽管从性能Angular 来看不建议这样做:
请求被发送到协调器节点
协调器节点为每个 id ,并向他们发送个人请求
等待来自每个节点的结果,将它们收集到结果集并发回
结果是:
所有子查询都需要等待最慢的副本
你有一个额外的网络希望从协调员到复制品
由于协调器节点需要将结果保存在内存中,因此对其施加了更大的压力
如果对每个 id 应用程序中的值,然后您:
避免额外的跃点—如果您使用具有令牌感知负载平衡的准备语句,那么查询将直接发送到副本
你可以在得到结果的时候开始处理,而不是等待一切
因此,发送并行异步请求可能比发送一个带有 IN ...

相关问题