MongoDB查询或程序化解决方案

时间:2014-01-16 22:59:47

标签: java mongodb algorithm bigdata database

我对大数据很新,我们有数百万条记录,其中包含以下数据 -

ID    Timestamp    Status
1.      12:00:00.      ON
1.       12:00:35.      Off
1.       12:01:01.      ON
1.        12:10:00.     Off
1.        12:11:00.      On

我需要计算它关闭的总时间。这涉及数百万条记录,因此解决方案必须快速。关于我可以通过算法或查询做什么的任何想法?我认为一种方法是通过数组迭代数据,但这似乎太耗时了,我相信人们之前已经这样做了。

1 个答案:

答案 0 :(得分:0)

您可以执行两个聚合,一个获取OFF时间戳的总和,另一个获取ON时间戳的总和(将所有内容标准化为自某个固定日期以来的秒数,尽可能选择最近的内容以避免溢出,尽管计算将是双重类型,所以你有一些喘息的空间)。然后从OFF时间戳中减去ON时间戳的总和。只要它们全部配对(每个ON都有一个OFF),这将是正确的答案。

那是因为你可以重写总和

enter image description here

其中'b'为OFF事件且'a'为ON事件。

要使用聚合框架执行此操作,假设您的文档格式为{_id: <id>, timestamp: <ts>, status: <'ON'|'OFF'>}

,此类内容可用于执行求和
db.coll.aggregate({$group: {_id: '$status', total: {$sum: '$timestamp'}}})