2017-08-08 58 views
-2

假设我们有带时间戳记的表t,t填充了数据超时。 假设数据以行之间的间隔为几秒(不是恒定的间隔)插入n行的突发中,然后在相对较长的时间内未插入,这是合理的。我正在寻找那个n。任何建议?计算平均突发大小

林使用MySQL所以MySQL的代码示例将是巨大的,但又称算法的建议使用或任何能好,以及...

+2

请与我们分享表格和数据,并提供给我们预期的结果..您将得到更多,也许更好的答案 –

+1

请参阅:[为什么我应该提供一个MCVE在我看来是一个非常简单的SQL查询?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query) – Strawberry

回答

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) 

确保您使用的日期/时间戳您使用适当的时间比较功能,而不是ma如我上面所做的那样,主题为“减号”。

为了保证性能 - 这是一个适中的金融系统的高吞吐量表,数据的一致性是坚实的,吞吐量永远不会成为瓶颈。我可以为您提供一些关于如何实现插入/删除例程的提示。

+0

不错的链表实现,但是计算突发大小n呢?你如何建议这样做? –

+0

我可能不理解你的原始问题,我想我的答案中的示例'SELECT'查询演示了如何?我的理解是否正确:'n'是插入任何两个记录之间的时间* – wally

+0

如果您正在查看有多少记录插入记录次数为10秒(从时间戳A到B的时间段),最佳方法是迭代地在存储过程中绘制该数据(或您选择的语言)。 SQL只能按其可用的数据进行分组(在表中)。 – wally