Mapreduce 用Riak存储时间序列的最有效方法是什么

Mapreduce 用Riak存储时间序列的最有效方法是什么,mapreduce,erlang,nosql,time-series,riak,Mapreduce,Erlang,Nosql,Time Series,Riak,我目前的做法是: 我有一个域类-应用程序 我系统中的每个应用程序都存储在应用程序键下的应用程序存储桶中 除了存储在此bucket中的应用程序元数据外,每个应用程序都有自己的bucket,称为“time\u metrics/application\u KEY”,其中我以以下方式存储时间序列: 键-时间戳/值-一些属性 我关心的是给定应用程序在特定时间窗口内进行查询的效率。目前,为了从某个特定的时间窗口获取时间序列,并最终进行一些缩减,我必须对整个“时间度量/应用程序密钥”桶进行映射/缩减,我

我目前的做法是:

  • 我有一个域类-应用程序
  • 我系统中的每个应用程序都存储在应用程序键下的应用程序存储桶中
  • 除了存储在此bucket中的应用程序元数据外,每个应用程序都有自己的bucket,称为“time\u metrics/application\u KEY”,其中我以以下方式存储时间序列:

    -时间戳/-一些属性

我关心的是给定应用程序在特定时间窗口内进行查询的效率。目前,为了从某个特定的时间窗口获取时间序列,并最终进行一些缩减,我必须对整个“时间度量/应用程序密钥”桶进行映射/缩减,我发现这不是推荐的用例


我的问题是:对于这种系统来说,什么样的数据库结构是最好的,查询它的效率如何。

如果您有多余的计算能力,并且事先知道需要什么密钥,您当然可以使用Riak的MapReduce,但通常检索密钥并在客户端上运行处理也会同样快(而且不会使您的集群紧张)

一些一般想法:

  • 将数据汇总到更大的块中
    • 如果您担心客户机在缓冲时崩溃会导致数据丢失,那么您可以随时在数据到达时存储数据
    • 类似的想法:在数据到达时存储数据,然后检索数据并按一定的间隔将其汇总
      • 一旦确信数据被可靠地存储在更大的块中,就可以使用Bitcask或内存后端自动终止数据
      • 内存后端对于任何只需要存储有限时间的数据都非常有用(RAM允许)
  • 相关:不要害怕存储数据的多个副本,以便于以后阅读/报告
    • 多个时间段(例如,5分钟和15分钟的时间段)
    • 多种报告格式

话虽如此,如果您直接进行键/值请求(最好始终能够计算所需的键,而不是进行索引或搜索),Riak可以支持非常大的流量负载,因此我不建议花费太多时间创建替代存储机制,除非您知道您将面临延迟问题。

补充@macintux的答案

Basho有一些客户使用riak进行时间序列度量。 Boundary对他们如何在网络监控软件中使用Riak有一个明确的定义。他们将数据汇总到不同的时间段(1米、5米、15米)进行分析。 他们还对在实施这一制度过程中吸取的经验教训进行了总结

Kivra还对他们如何将timeseries数据与riak结合使用进行了讨论


您可以将数据汇总成某种任意的时间长度,然后通过发出常规K/V GET读取所需的范围,然后在应用程序中重建更大的图像/减少。

您在时间序列中存储的是什么类型的数据?这是统计数据?是-对于每个时间戳存储给定应用程序的活动会话数阳离子