0

我们的列名是有目的地选择的,以便它们按照我们想要的顺序返回(键基本上是一个内部序列号)。我们的 rowkeys 是类似的顺序。基本上每天一个行键,当天的所有列都添加到该行。

鉴于此,如何在 Hector 中创建查询以从最近的行中返回最近的列?还是最老的?简而言之,两个最常见的查询是“获取最新条目”和“获取最旧条目”。

不过,我对 Cassandra 或 Hector 还不够熟悉,无法弄清楚正确的查询。它应该看起来像这样?

QueryResult<OrderedRows<String, String, Long>> result = 
  rangeSlicesQuery.setColumnFamily(cf).setKeys("", "").setRowCount(1).setRange("","",true,1).execute();

由于列名是动态生成的值,我不知道最后一个值或第一个值是什么时候,所以我看不到任何绕过键和列范围的开放式值的方法。希望 Hector/Cassandra 足够聪明,可以快速做到这一点,还是我应该做一些优化?

4

1 回答 1

2

您要确保列是反向排序的,这样您就可以对限制为 1 的行进行切片查询并仅获取最新值。如果您没有反向排序,则需要阅读整行。

至于如何获取最新的行,没有办法在一个查询中找到它。一种方法是维护所有行的索引(再次以相反的顺序,以便您可以使用相同的技巧来选择最近的行),然后先点击该索引,然后点击该行。另一种方法是,如果你对它的值有一个粗略的了解,并且你可以预测值的顺序(听起来你可以,每天应该有一行,并且应该没有比今天晚的行),那么你选择最新的可能值,并尝试加载该值,如果没有得到任何返回,则尝试加载下一个最近的值,依此类推。如果您在第一次尝试时不太可能获得成功(例如,如果不是每天都有一行,只是在大多数情况下),您可以一次查询五个或十个值,

于 2013-06-27T10:29:01.290 回答