时间戳作为 mongodb 中的键作为时间序列数据库

Posted

技术标签:

【中文标题】时间戳作为 mongodb 中的键作为时间序列数据库【英文标题】:Timestamp as Key in mongodb as timeseries database 【发布时间】:2017-01-05 17:01:32 【问题描述】:

我想使用 mongodb 作为时间序列数据库,并通过时间戳 + id 进行查询。

如图所示的MongoDB存储数据的方式here。


  timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
  ID: “System1”,
  values: 
    0:  0: 999999, 1: 999999, …, 59: 1000000 ,
    1:  0: 2000000, 1: 2000000, …, 59: 1000000 ,
    …,
    58:  0: 1600000, 1: 1200000, …, 59: 1100000 ,
    59:  0: 1300000, 1: 1400000, …, 59: 1500000 
  

但我有多个值,每个值都有一个时间戳,它不是周期性的。 数据有一些时间延迟或几天没有到来。 所以我不想用 0-24 表示我的小时数和 0-59 表示我的分钟数。 我可以改用我测量的时间戳吗?我文档中的每个值都具有相同的时间戳,因此如果 value1 有 50 个条目,则 value2 也有 50 个条目且时间戳相等。

     
          timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
          ID: “System1”,
          values1: 
            "2013-10-10T22:00: 
         "2013-10-10T22:01:00.000Z": 999999, 
         "2013-10-10T22:02:00.000Z": 999999,
         "2013-10-10T22:03:00.000Z": 1000000 
                                ,
            "2013-10-10T23:00:":  
         "2013-10-10T23:01:00.000Z": 2000000,
         "2013-10-10T23:02:00.000Z": 2000000, 
                                 ,
          
         values2: 
            "2013-10-10T22:00: 
         "2013-10-10T22:01:00.000Z": 999999, 
         "2013-10-10T22:02:00.000Z": 999999,
         "2013-10-10T22:03:00.000Z": 1000000 
                                ,
            "2013-10-10T23:00:":  
         "2013-10-10T23:01:00.000Z": 2000000,
         "2013-10-10T23:02:00.000Z": 2000000, 
                                 ,
         
    

【问题讨论】:

【参考方案1】:

您可以使用传入的时间戳来存储您的值,并使用单独的 mongodb map-reduce 进程 来转换您的值并以您需要的粒度将它们存储在不同的集合中(例如每小时、每天、每月)。另见incremental map-reduce。

您还可以发现这些帖子鼓舞人心:

Schema Design for Time Series Data in MongoDB What is the best way to store time series data in MongoDB? MongoDB as a Time Series Database

【讨论】:

【参考方案2】:

这是一个非常糟糕的选择。当然,您可以像这样存储数据。但是当数据量很大的时候,比如海量的数据采集点,每个采集点都有海量的数据(比如间隔10秒),MongoDB就会变成一场噩梦。

尝试对时间序列数据使用实时序列数据库。

【讨论】:

以上是关于时间戳作为 mongodb 中的键作为时间序列数据库的主要内容,如果未能解决你的问题,请参考以下文章

基于作为数组的键值删除用户元

如何使用 MongoDB ObjectId 作为上一个和下一个按钮的键进行分页?

使用 Django 时如何在 MongoDB 中使用不同的键名?

猫鼬使用浮动作为关键

如何使用 MongoDB 作为唯一/枚举存储

Firebase 实时数据库 - DatabaseReference.push().getKey() 是一个时间戳