我有一个异步的事件流,每个事件包含以下信息 –
- 机构(我的解决方案可能服务的多个机构之一)
- 代理(机构中的多个代理之一)
- 服务对象(由一个或多个机构服务的个人/组织)
- 日期+时间
- 类别数据(来自固定但庞大的标签集的标签)
我需要做的是 –
-
根据服务对象、日期+时间和类别数据关联事件,并创建一个新的综合事件。例如:
事件 #0021: { 机构=’XYZ’, 代理=’ABC’, 服务对象=’MMN’, 日期+时间=’12-03-2011/11:03:37′, 类别数据=’missed-delivery,no-repeat,untracable,orphan’ }
事件 #0193: { 机构=’KLM’, 代理=’DAY’, 服务对象=’MMN’, 日期+时间=’12-03-2011/12:32:21′, 类别数据=’missed-delivery,orphan,lost’ }
事件 #1217: { 机构=’KLM’, 代理=’CARE’, 服务对象=’MMN’, 日期+时间=’12-03-2011/18:50:45′, 类别数据=’escalated’ }
在这里,我发现有三个事件在时间上相隔较远(超过7小时),但它们属于同一个服务对象(MMN),发生在一定的时间窗口内(例如24小时内),并且具有匹配或相关的类别数据。
-
最终创建一个综合(新)事件,该事件可以代表得出的推断。
-
能够基于特定类别数据标签(例如 missed-delivery)在一段时间内,按机构、代理、服务对象生成报告。这些报告可以基于原始/输入事件,或综合(推断)事件生成。
-
虽然目前这不是要求,但未来很可能需要在类别数据中出现的“标签”能够自动增长。因此,不确定是否应该将其视为非结构化数据处理。
-
虽然这也不是当前的直接需求,但在未来可能需要识别事件发生的趋势/模式(即事件1导致事件2导致事件3)。
事件到达率可能非常高… 每分钟可能有数千个事件。甚至更多。而且,我需要将原始/综合事件归档一段时间(一个月左右)。
我的解决方案需要基于开源软件组件(优先)。目前进行的一些研究指向复杂事件处理(CEP)、贝叶斯网络/分类、预测分析的方向。
希望能得到一些关于应采取的方法的建议。我更倾向于选择一条能够满足我大部分目标,同时难度/时间最小的路径,或者换句话说,“学习AI”或“正式统计方法”不是我的短期目标 🙂
回答:
Mike,
你有没有考虑过使用像Esper/Nesper这样的工具,看看它们是否能满足你的需求?我自己也研究过类似的工具——特别是在Erlang上(查看我的帖子这里),你会在那找到一些有用的答案。
IC