【问题标题】:Alternative to disappearing time-series: Time-series database modelling替代消失的时间序列:时间序列数据库建模
【发布时间】:2018-11-16 20:18:26
【问题描述】:

我是时间序列数据库设计的新手。

我读过的指导原则之一是避免大量时间序列(例如InfluxDb recommendations)或短暂/消亡的时间序列。

作为练习,我正在尝试对 github 存储库的指标进行建模。我想跟踪由各种属性聚合的 cmets / commits / changed 行的总数。我最初的想法是在每个拉取请求上推送指标,并通过查询进行所有聚合。

{
   labels: {
      pr: 1234, 
      repo: aRepo, 
      author: personA
   }
   values: {
      commits: 5,
      changed_files: 2,
      comments: 0
      status: Open
   }
}

但这似乎与建议背道而驰(拉取请求被关闭并变得恒定)。另一种方法是在将聚合推送到数据库之前预先计算聚合。但是,这会导致数据粒度更小,并且会丢失数据。

对于临时时间序列的情况,这里的最佳策略是什么。

【问题讨论】:

    标签: database-design time-series influxdb prometheus


    【解决方案1】:

    弄清楚什么是系列和什么是度量的经验法则是考虑数据集(系列)的基数:

    1) 低基数(变量较少)值进入标签 - 这是您的分组/聚合道具

    2) 高基数(高度可变)值本身就是测量值 - 这就是您要在上述组中聚合/计算的值

    根据这条规则,pr id 进入值(每个 repo 都是唯一的 - 高基数),而 status 绝对是一个标签(你称它为标签)。

    这样做,你的时间序列就会很好。

    【讨论】:

    • 这是很好的反馈。然而,一些时间序列数据库使用时间戳作为标识符,并将覆盖具有相似时间戳和标签组合的数据点 - 例如 InfluxDb。在这个例子中,如果我们同时测量 2 个拉取请求,使用相同的标签集,前一个将被覆盖。
    • 我宁愿想知道其他时间序列数据库是否不会这样做。毕竟,那是一个时间序列,因此时间是测量点的最终关键!然后,如果有多个标签,则可以识别该点的确切含义。所以,如果点的时间相同,点标识符是相同的 - 将它们分开的原因是什么?我找不到任何东西,你能做到吗?
    最近更新 更多