3

我需要收集看起来像这样的各种时间序列指标

{event_type, event_time, data_point1, data_point2}

然后我需要执行临时查询,例如“如果 datapoint2=7,则事件 X 的所有 datapoint1 值以 5 分钟间隔”或“这一小时内事件 Y 的 datapoint1-datapoint2 的平均值”。

我已经看到了一些关于在 mongo 中建模时间序列的材料,但它似乎根据您将询问的查询预先聚合数据。是否仍然可以将所有数据点保存在 mongo 中并执行免费查询?

4

1 回答 1

2

我可能在这里遗漏了一些东西,但我相信你想要一个集合:

{event_type, event_time, data_point1, data_point2}

这样您就可以执行查询。该文档应该很容易满足您的两个查询,后者是使用聚合框架 ( $avg) 完成的。

这将为您提供完全自由形式的查询。

我想你可能刚刚被链接的帖子弄糊涂了(http://www.quora.com/Time-Series/What-is-the-best-way-to-store-time-series-data-in-MongoDB)。它显示了一种预聚合形式,它将形成您的数据的顶级结果,这些结果通常很难按需进行。

当然,正如您所注意到的,这种方法会限制查询能力,但是时间序列可能会变得非常大,而且我不确定聚合框架是否可以在您的自由格式数据集上进行更复杂的查询。这就是预聚合的用武之地。它为您的低级数据提供了一些顶级数据,有效地使聚合更容易。

因此,在那篇文章中,您可以看到@Jared 实际上展示了他拥有的第一个收藏,它是以下内容的详细收藏:

{ 
    timestamp: "Sun May 02 2010 19:07:40 GMT-0700", 
    metric1: 10,
    metric2: 20,
}

这将是您的详细信息集合,其中包含:

{event_type, event_time, data_point1, data_point2}

您可以以自由形式查询的集合,然后@Jared 继续展示如何创建以将数据分级到该详细信息集合,以使其他聚合更容易。

所以我不确定问题出在哪里,详细信息集合存储所有data_points内容并允许您执行免费查询,当然前提是您有正确的索引。

于 2012-12-25T10:51:35.240 回答