1

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

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

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

4

1 回答 1

1

MapReduce 是一项相当昂贵的操作,不推荐作为实时查询工具。在批处理模式下运行有限的数据集时效果最佳,可以控制并发 mapreduce 作业的数量,因此我不推荐第一个选项。

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

如果您需要计算出的记录准确并且将执行大量此类查询,则最好将计算出的摘要记录作为编写和更新过程的一部分进行更新。

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

于 2013-07-04T12:07:52.313 回答