你会如何用 Java 设计一个分布式滑动窗口算法?我有一个用于模式检测的自动机。它要么处于接受状态,要么处于无效状态。
假设我正在寻找的模式是年龄:20,然后是年龄:30。该模式是具有两个值(20、30)的 LinkedList。自动机一次接受一条记录。它保持 LinkedList 的状态,以了解到目前为止它匹配了多少。它一次接受一条记录,当记录与 LinkedList[i] 匹配时,它会执行 i++。否则,它无效,这意味着 i=0。
自动机将让所有记录流过它,并可靠地识别 20 和 30 的所有模式。
当从滑动窗口调用自动机时,情况会变得更加复杂。滑动窗口是基于时间的。首次调用时,会设置一定的持续时间,例如 10 秒。窗口保存当前时间戳,每次调用自动机时,它首先检查保存的时间戳与当前时间。如果它早于 10 秒,则窗口会重置时间戳并使自动机无效[因为自动机匹配的任何内容都可能早于 10 秒。我说可能是因为在某些情况下,只是窗口中的一些记录较旧,而其他记录还可以,但是状态仍然无效。窗口是一个近似值]。
现在,真正的挑战是利用多台 PC 使用滑动窗口和自动机来查找数据中的模式。我发现了许多提到算法的论文,例如这里http://www.softnet.tuc.gr/~minos/Papers/vldbj15.pdf,但我想将现有算法重用于具有模式的分布式基于时间的滑动窗口检测(或与其他自动机)。
你会如何设计它,或者你能推荐 Java 中的任何算法吗?基本上,这种情况是有大量数据以高速到达,因此需要使用多台 PC。数据需要在多个节点上进行分区,并且这些节点需要成功检测模式。
或者,将接受任何以 Java 或其他语言实现任何分布式滑动窗口算法的答案。