【问题标题】:Drools high level algorithm design for billing systemDrools 计费系统高级算法设计
【发布时间】:2015-12-21 18:28:17
【问题描述】:

我想知道是否有人可以为我指明正确的方向,帮助我设计一种高级算法来解决如下所述的问题,使用 Drools。

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

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

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

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

此外,由于我还将根据此记帐对象做出决策,因此它也必须插入 KieSession 中,并在整个会话期间保持不变,对吗?

感谢您就使用 Drools 解决此类问题的可能解决方案/实施方法给我的任何建议,如果我说的有道理,请告诉我,如果没有,请纠正我。谢谢!

【问题讨论】:

    标签: architecture drools billing


    【解决方案1】:

    您的问题没有太多内容,因此不会有太多错误。

    只有几点说明:

    1. 一一交替插入和fireAllRules 可能不是最佳的。准备好将批量大小 N 作为参数。
    2. 规则引擎受 CPU 限制,获取 CDR 受 I/O 限制。如果最小化经过的时间很重要,那么通常的原则适用于此。
    3. 处理按客户端排序的 CDR 可能是有利的。可以独立运行稳定的排序(保持日期/时间顺序)。
    4. 可能(或将来会出现)客户组必须作为一个整体进行监控。只是排序标准的一个变体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 2021-08-23
      • 1970-01-01
      • 2014-05-17
      • 2020-05-30
      相关资源
      最近更新 更多