为计费系统降低了高级算法设计

时间:2015-09-24 08:13:07

标签: architecture drools billing

我想知道是否有人可以指出我正确的方向来帮助我设计一个高级算法来解决下面解释的问题,使用Drools。

让我们考虑一个计费系统,在这个系统中,对于给定月份和给定服务,我可以从数据库中获取数百万条记录,例如呼叫详细记录(CDR),即具有客户端ID和我想要的许多其他字段用来在规则中推理。问题是,我不仅需要根据个人记录采取行动,还需要根据适用于某些聚合的条件。例如,假设在达到某个阈值数量后(即,500日之后的每个CDR更便宜),将对所有CDR应用不同的价格。实际上,规则要复杂得多。

现在,我很确定这个想法不是将所有这些记录一起插入引擎(KieSession),然后解除所有规则。因此,我需要一些Object,我们称之为“会计元素”,我可以从中收集每个已处理记录的所有信息。在这种情况下,我会这样做:

for each CDR loop:
    Insert a record;
    Fire all the rules;
    Delete the record;

在Drools的规则中,我需要更新我的会计对象,例如计算为每个客户/服务处理的记录数。

此外,由于我也将根据这个会计对象做出决定,它也必须插入KieSession,并在整个会话期间保留在那里,对吗?

我很感激你可以给我提出任何关于使用Drools解决这个问题的可能解决方案/实现方法的建议,请告诉我,如果不是,我说的话是否有意义或纠正我。谢谢!

1 个答案:

答案 0 :(得分:0)

你的问题并不多,所以没有太多可能是错的。

只有几点评论:

  1. 交替插入和fireAllRules一个接一个可能不是最佳的。准备将批量大小N作为参数。
  2. 规则引擎受CPU限制,获取CDR是i / o绑定的。如果最小化经过的时间很重要,通常的原则适用于此。
  3. 处理由客户分类的CDR可能是有利的。稳定的排序(维护日期/时间顺序)可以独立运行。
  4. 可能存在(或将来)客户端组,必须作为一个整体进行监控。只有排序条件的变体。