通过 java 中的主键列表进行 cassandra 查找
cassandra lookup by list of primary keys in java
我正在实现一项需要通过主键列表查找 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);
?
任何帮助或指点将不胜感激?
如果id
是全主键,那么Cassandra支持这个,虽然从性能的角度不推荐:
- 请求被发送到协调器节点
- 协调器节点为每个
id
找到一个副本,并向它们发送单独的请求
- 等待每个节点的结果,将它们收集到结果集并发回
结果:
- 你所有的子查询都需要等待最慢的副本
- 你有一个从协调器到副本的额外网络希望
- 你给协调节点施加了更大的压力,因为它需要将结果保存在内存中
如果您对来自应用程序的每个 id
值执行大量并行、异步请求,那么您:
- 避免额外的跃点 - 如果您使用具有令牌感知负载平衡的准备好的语句,则查询将直接发送到副本
- 您可能会在获得结果时开始处理结果,而不是等待所有结果
因此发送并行异步请求可能比使用 IN
...
发送一个请求更快
我正在实现一项需要通过主键列表查找 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);
? 任何帮助或指点将不胜感激?
如果id
是全主键,那么Cassandra支持这个,虽然从性能的角度不推荐:
- 请求被发送到协调器节点
- 协调器节点为每个
id
找到一个副本,并向它们发送单独的请求 - 等待每个节点的结果,将它们收集到结果集并发回
结果:
- 你所有的子查询都需要等待最慢的副本
- 你有一个从协调器到副本的额外网络希望
- 你给协调节点施加了更大的压力,因为它需要将结果保存在内存中
如果您对来自应用程序的每个 id
值执行大量并行、异步请求,那么您:
- 避免额外的跃点 - 如果您使用具有令牌感知负载平衡的准备好的语句,则查询将直接发送到副本
- 您可能会在获得结果时开始处理结果,而不是等待所有结果
因此发送并行异步请求可能比使用 IN
...