2013-07-03 61 views
1

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

  • 实时映射精简 - 做整个计算在MapReduce工作,在查询时
  • ETL作业 - 做定期查询在后台工作,并将结果存储回riak
  • 将它放到应用程序层 - 不要使用riak进行排序,而是使用应用程序级层对记录进行排序和缓存。

Mapreduce似乎是纸上最好的,但是,我读过关于riak mapreduce的实际延迟的混合报告。

回答

1

MapReduce是一个相当昂贵的操作,不推荐作为实时查询工具。当在批处理模式下运行一组有限的数据时,它可以很好地工作,其中并发mapreduce作业的数量可以控制,因此我不会推荐第一个选项。

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

如果您需要计算的记录是准确的并且将执行大量的这些查询,那么作为写入和更新过程的一部分,更新计算的摘要记录可能会更好。

一般来说,确保您可以尽可能高效地获取所需的数据(最好是通过直接键访问),然后执行不需要的数据过滤以及对数据进行排序和聚合应用程序方面。