如何根据riak中的时间间隔进行查询

时间:2013-05-08 13:55:25

标签: mapreduce riak riak-search

我正在尝试实现以下功能。我有一个存储对象的存储桶。对象字段之一是时间戳。现在我想检索时间戳介于一个区间之间的对象(20130605 08:00:00到20130605 08:05:00) 我的意思是我需要从8.00到8.05获取所有对象。

我可以使用Map Reduce或使用二级索引来实现吗?

我正在考虑的另一种方法是创建桶本身,如20130605:0800:0805,然后将对象存储在此桶下。所以现在,我不想实现基于条件时间间隔的查询。请提出建议。

1 个答案:

答案 0 :(得分:3)

根据您存储的数据类型,有几个选项。正如您正确指出的那样,二级索引是解决此问题的一种方法,因为它们支持完全匹配和范围查询。你可以,例如创建一个二进制索引(可能甚至是一个整数索引),其中包含示例中概述的时间戳,然后根据此索引上的范围查询进行提取。

如果您的数据允许,另一个选项可能是在一个记录中存储多个对象,并为该记录提供一个表示特定时间间隔的键。这将允许您直接使用键检索覆盖特定时间段的记录,这非常有效并且可以很好地扩展。我已经为可能类似的场景here描述了这种方法。

您将根据插入的数据量和频率确定单个记录所涵盖的时间段,以便记录的大小不会增大(几MB)。你可以,例如收集单个记录中的所有数据一分钟,并以“YYYYMMDDHHMI”格式为其提供密钥。如果您正在寻找涵盖期间20130605 08:00至20130605 08:05的所有数据,您将直接获取记录201306050800,201306050801,201306050802,201306050803和201306050804。