我需要收集各种时间序列指标,如下所示
{event_type, event_time, data_point1, data_point2}
然后我需要执行即席查询,例如“如果datapoint2 = 7,则在5分钟间隔内事件X的所有datapoint1值”或“此小时内事件Y的数据占用datapoint1-datapoint2”。
我在mongo中看到了some material关于建模时间序列的问题,但它似乎是根据您要求的查询预先汇总数据。是否仍然可以在mongo中保存所有数据点并执行免费查询?
答案 0 :(得分: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
并允许您执行免费查询,前提是您当然拥有正确的索引。