通过Hector从Cassandra的一行获取多个列范围

时间:2012-10-09 09:13:58

标签: cassandra hector

鉴于我在Cassandra中有一行有多个列,其中有一个Integer作为键和一些值。在Hector中使用SliceQuery让我能够获得这一列的一个范围。是否有可能通过一个查询获得多个范围?

示例cassandra行:

columns 3, 7, 12, 34, 45, 46, 59, 98, 99
----------------------------------------
values  a, f,  e,  v,  a,  r,  r,  o,  k

如何使用Hector在一个查询中获取20到30 50到90的所有列?

2 个答案:

答案 0 :(得分:3)

要在PlayOrm开源项目中解决这个问题,我们这样做......

Hector是否像astyanax那样进行异步调用,以便您可以执行此操作

for(Query q : queryList) {
// this next call is non-blocking..sends requests and returns immediately not waiting for response
   Future f = q.executeAsycn(); 
   futures.add(f);
}

//Now, both column slices are happening in parallel at the SAME time

for(Future f : futures) {
   Result r = f.get(); //this will block for the first result
}

通过这种方式,它就像api有一个单独的api呼叫一样快,所以不需要一个电话。

迪安

答案 1 :(得分:2)

我不这么认为。要将其保留在一个查询中,您必须使用包含所有感兴趣切片的单个切片,然后在客户端根据列逐一确定列是否属于您感兴趣的范围之一。

你应该注意,如果在一次调用中处理那个大片中的所有列的数据太多,那么你可以使用分页来减少客户端数据的占用空间,但是你可能会这样做只需为每个原始切片单独调用。