计算平均突发大小

时间:2017-08-08 08:37:52

标签: mysql time-series

假设我们有时间戳colmun ts的表t,t加上数据超时。 可以合理地假设数据以行之间的几秒间隔(不是恒定间隔)插入n行的突发中,然后在相对长的时间内不插入。我想找到那个。有什么建议吗?

我正在使用MySQL,因此MySQL代码示例会很棒,但也有使用已知算法的建议或者其他什么也可以很好...

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,这听起来像是我之前必须解决的问题。 (虽然它是伪装给我的。)

MySQL没有办法有效地查看上一个/下一个记录之间的差异。我通过在表格中引入链表来解决这个问题。

执行此操作的成本是所有插入和删除都必须通过事务安全的过程,以保持(双)链接列表。我选择了一对存储过程非常漂亮。

生成的数据集如下所示:

+------------------------------------+
| id | insert_ts | prev_id | next_id |
+------------------------------------+
| 1  | 12:32     | NULL    | 2       |
| 2  | 12:34     | 1       | 3       |
| 3  | 12:40     | 2       | NULL    |
+------------------------------------+

(在prev_idnext_id上使用外键唯一索引。)

然后查询任何记录与之前的记录之间的差距:

SELECT 
  my.id,
  my.insert_ts - prev.insert_ts
FROM table AS my
LEFT JOIN table AS prev ON (my.prev_id = prev.id)

如果您使用日期/时间戳,请确保使用适当的时间比较功能,而不是数学'减去'正如我上面所做的那样。

为了确保您的性能 - 这是一个适用于金融系统的高吞吐量表,数据一致性非常稳固,吞吐量从未出现过瓶颈。我可以提供一些关于如何实现插入/删除例程的提示。