我需要收集看起来像这样的各种时间序列指标
{event_type, event_time, data_point1, data_point2}
然后,我需要执行临时查询,例如“如果 datapoint2=7,则事件 X 的所有 datapoint1 值在 5 分钟间隔内”或“这一小时内事件 Y 的 datapoint1-datapoint2 的平均值”。

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

最佳答案

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

{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 并允许您执行免费查询,当然前提是您拥有正确的索引。

关于mongodb - mongodb 是否适合通用时间序列数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14024577/

10-16 20:57
查看更多