我们有目的地选择我们的列名,以便按照我们想要的顺序返回它们(键基本上是一个内部序列号)。我们的rowkeys也是同样的。基本上每天一个rowkey,当天的所有列都添加到该行。
鉴于此,我如何在Hector中创建一个查询以返回最近一行中最新的列?还是最古老的?简而言之,两个最常见的查询是“让我获得最新的条目”和“让我获得最老的条目”。
我对Cassandra或Hector的熟悉程度不足以解决正确的查询问题。它看起来应该是这样的吗?
QueryResult<OrderedRows<String, String, Long>> result =
rangeSlicesQuery.setColumnFamily(cf).setKeys("", "").setRowCount(1).setRange("","",true,1).execute();
由于列名是动态生成的值,并且我不知道最后一个值或第一个值是什么时候,我看不到任何方法来绕过键和列范围的开放结束值。希望Hector / Cassandra能够很快地做到这一点,或者我应该进行一些优化吗?
答案 0 :(得分:2)
您希望确保以反向排序列,这样您就可以对具有限制1的行执行切片查询,并仅获取最新值。如果您没有反向排序,则需要阅读整行。
至于如何获取最新的行,无法在一个查询中找到它。一种方法是维护所有行的索引(再次以相反的顺序,以便您可以使用相同的技巧来选择最新的行),然后首先点击此索引,然后是行。另一种方法是,如果你粗略地了解它的价值,你可以预测值的顺序(它听起来像你可以,每天应该有一行,并且应该没有比今天晚的行),然后你选择最新的可能值,并尝试加载该值,如果您没有得到任何回复,则尝试加载下一个最新值,依此类推。如果您第一次尝试时不太可能受到影响(例如,如果每天都没有行,只是大多数日子),您可以一次查询五个或十个值,然后选择最近你回来了(如果你什么也得不回来,重复一遍)。