【发布时间】:2018-12-17 05:40:47
【问题描述】:
我正在使用 Akka HTTP 在 post 请求中发送数据并将其累积在一个列表中。我需要对该数据执行一些规则,这些规则将对批次进行聚合。要创建批次,我需要将数据窗口化固定时间
我在 List 中的数据类似于,
data = List(
Map("a" -> 1.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0,"time" -> 12345678293), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 40.0, "d" -> 2.0,"time" -> 12345678293), Map("a" -> 4.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0,"time" -> 12345678293), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 90.0, "d" -> 17.0,"time" -> 12345678293),...
)
时间在提供的纪元中
这个列表会随着时间不断增加
我的规则是这样的
RuleName function WindowTime
R1 sum(a) 5 Min
R2 avg(b) 10 Min
R3 StdDev(d) 30 Min
... ... ...
等等
忽略函数列,现在,我的问题是我有大约 200 条这样的规则,它们有不同的窗口时间。如何创建和管理这么多不同的窗口?如何触发事件,让规则按时执行
根据上面的示例,规则 R1 每 5 分钟执行一次,R2 每 10 分钟执行一次,所以,直到所有规则都不执行,我也不能使数据过期。请注意,当 R2 将执行时,R1 也会执行,因为 R1 已完成 5 分钟,而 R2 已完成 10 分钟。
我纯粹使用 Scala,Akka。
我也经历了drools,但我不知道drools如何管理不同窗口的这么多规则。
感谢任何想法和帮助。 提前致谢!
【问题讨论】:
-
似乎是 Iteratee 模式的一个用例。但 Streams 也可能是一个粗略的解决方案。 Drools 仅对“规则表示”和“规则执行”有用。你的问题更多是关于规则的功能。
标签: java scala akka drools akka-http