1

鉴于我在 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 到 3050 到 90 的所有列?

4

2 回答 2

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 调用一样快,所以不需要一个调用。

院长

于 2012-10-09T14:48:01.600 回答
2

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

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

于 2012-10-09T12:37:38.083 回答