当前位置: 首页 > 面试题库 >

在巨大的事件流中发现差距?

景阳曜
2023-03-14
问题内容

我在PostgreSQL数据库中有大约一百万个具有以下格式的事件:

id        |   stream_id     |  timestamp
----------+-----------------+-----------------
1         |   7             |  ....
2         |   8             |  ....

大约有50,000个唯一流。

我需要找到所有两个事件之间的时间间隔都超过特定时间段的所有事件。换句话说,我需要找到在特定时间段内没有事件的事件对。

例如:

a b c d   e     f              g         h   i  j k
| | | |   |     |              |         |   |  | |

                \____2 mins____/

在这种情况下,我想找到对(f,g),因为这些是紧挨着缺口的事件。

我不在乎查询是否慢,即在一百万条记录上花费一个小时左右就可以了。但是,数据集将保持增长,因此,如果数据集速度缓慢,则可以合理地扩展。

我在MongoDB中也有数据。

执行此查询的最佳方法是什么?


问题答案:

您可以使用lag()window函数在分区上通过stream_id(由时间戳排序)来执行此操作。该lag()函数使您可以访问分区中的前几行;没有滞后值,它是前一行。因此,如果stream_id上的分区按时间排序,则上一行是该stream_id的上一个事件。

SELECT stream_id, lag(id) OVER pair AS start_id, id AS end_id,
       ("timestamp" - lag("timestamp") OVER pair) AS diff
FROM my_table
WHERE diff > interval '2 minutes'
WINDOW pair AS (PARTITION BY stream_id ORDER BY "timestamp");


 类似资料:
  • 问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此当我经过它们时,为了节省时间,我离

  • 我正在Windows 8.1 64位上开发java swing应用程序,带有4GB内存和JDK版本8u20 64位。 问题是当我使用带有监视器选项的Netbeans profiler启动应用程序时。 加载第一个Jframe时,应用程序Memory Heap约为18mb,JVM进程大小约为50mb(Image1)。 然后,当我启动另一个Jframe时,它包含一个带有webView的JFxPanel,

  • 问题内容: 我正在使用Cython或NumPy对一维数组中的每个元素求和。当对 整数 求和时,Cython快〜20%。当对 浮点 求和时,Cython慢 约2.5倍。以下是使用的两个简单功能。 时机 创建两个数组,每个数组包含一百万个元素: 附加点 NumPy在浮点数方面的表现(相当大的优势)甚至超过了自己的整数和。 的性能差异与和指令缺失相同。为什么? 将整数numpy数组转换为C指针()可将性

  • 具有事件源的CQR看起来非常适合作为我们的一个系统的架构,目前我们只担心一件小事:处理大量事件,并因此处理大型事件商店。 我们当前的系统每天接收大约一百万个事件(目前与事件源无关),如果我们将它们存储在更长的时间内,我们的事件存储可能会变得相当大,但是如果我们经常转储/清除滚动快照,我们可能会失去事件源的一大优势:关于系统历史和重播的信息。 在CQRS架构中处理这个问题的常见方法是什么?这到底是个

  • 问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此,经过它们以节省时间时,我离开了循

  • 在使用KafkaSpout和几个Bolt开发并执行了我的Storm(1.0.1)拓扑之后,我注意到即使拓扑处于空闲状态,也会出现巨大的网络流量(Kafka上没有消息,Bolt中没有处理)。因此,我开始逐一评论我的拓扑结构,以便找到原因,现在我的主要内容中只有Kafka普特: 当这个(无用的)拓扑执行时,即使是在本地模式下,即使是第一次,流量总是会增长很多:我看到了(在我的活动监视器中) 平均每秒接