0

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

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

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

4

1 回答 1

3

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

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

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

于 2013-05-09T09:35:13.260 回答