【问题标题】:Get most recently added column across all rows?获取所有行中最近添加的列?
【发布时间】:2013-06-27 18:29:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java cassandra hector


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这似乎证实了我昨天查看的无数网页 :)。遗憾的是,Cassandra 似乎不太适合这组基于我们现在配置的东西的特定查询。我得回去想想我们是如何建模的……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多