Riak和时间排序的记录

时间:2013-07-03 21:55:31

标签: riak

我想通过每个记录的得分和“年龄”(当前时间 - 创建日期)的函数对存储在riak中的一些记录进行排序。 在riak中执行“时间敏感”查询的最佳方法是什么?到目前为止,我所知道的选项是:

  • 实时mapreduce - 在mapreduce作业中,在查询时执行整个计算
  • ETL作业 - 定期在后台作业中执行查询,并将结果存储回riak
  • 将它添加到应用层 - 不要使用riak进行排序,而是使用应用级层来对记录进行排序和缓存。

Mapreduce似乎是最好的纸上谈兵,然而,我读过有关riak mapreduce真实延迟的混合报道。

1 个答案:

答案 0 :(得分:1)

MapReduce是一项非常昂贵的操作,不建议用作实时查询工具。当在批处理模式下运行有限数据集时,它最有效,其中可以控制并发mapreduce作业的数量,因此我不建议使用第一个选项。

如第二个选项中所述,让进程定期处理/聚合特定时间片的数据可以起作用,并允许通过直接密钥访问有效地访问准备好的数据。如果使用leveldb,聚合过程可以基于包含时间戳的二级索引。但是,一个缺点可能是新插入的记录可能不会立即显示在结果中,这可能是您的方案中的问题,也可能不是。

如果您需要计算的记录准确并且将执行大量这些查询,那么在编写和更新过程中更新计算的摘要记录可能会更好。

一般来说,最好确保尽可能高效地获取所需的数据,最好是通过直接密钥访问,然后对不需要的数据进行过滤以及对数据进行排序和聚合。申请方。