对象实例上的drools规则

对象实例上的drools规则,drools,use-case,Drools,Use Case,我有以下用例: 有许多(比如10000个)帐户,每个帐户(可以通过id识别)都应该有自己的一套规则。不同账户的规则可能相互矛盾。出于性能原因,如果一个新的事实(我知道它只与帐户xyz相关)只根据帐户xyz的规则进行检查,这将是理想的 至于我对口水的一点理解,所有的东西只有一个规则空间和一个事实空间。对吗?这意味着我必须为每个账户制定特殊规则,比如 rule "rule 1 for account xyz" when $acc: Account(id == "xyz")

我有以下用例: 有许多(比如10000个)帐户,每个帐户(可以通过id识别)都应该有自己的一套规则。不同账户的规则可能相互矛盾。出于性能原因,如果一个新的事实(我知道它只与帐户xyz相关)只根据帐户xyz的规则进行检查,这将是理想的

至于我对口水的一点理解,所有的东西只有一个规则空间和一个事实空间。对吗?这意味着我必须为每个账户制定特殊规则,比如

rule "rule 1 for account xyz"
    when
        $acc: Account(id == "xyz")
        <more conditions go here>
    then
        $acc.doSomething();
    end
规则“账户xyz的规则1”
什么时候
$acc:帐户(id==“xyz”)
然后
$acc.doSomething();
结束
这将导致大量的规则,可能会导致执行缓慢。 你能给我一个如何有效处理这个用例的提示吗

至于我对口水的一点理解,所有的东西只有一个规则空间和一个事实空间。对吗

不,那是不对的。您可以有多个知识库(Drools 6.x中的Kiebase)以及您需要的特定规则集。 从特定的知识库中,您可以创建任意数量的会话(事实空间)

在您的情况下,为您的每个帐户建立特定的知识库似乎是正确的决定


希望有帮助,

谢谢您的回答。拥有10000个知识库(关于内存和线程)有多昂贵?这种方法适合这么多的客户吗?即使在一个程序中运行所有10000个会话,也会有相当大的开销。但请看我对这个问题的评论,很难想象10000套不同的规则是如何有序地维护和部署的。在约束中的规则模式和/或属性用法不同的意义上,这一群体真的很重要吗?或者它只是作为参数的各种文字?或者,也许,介于……之间。。。?是否有专家对此进行了分析?只有少数规则(比如不超过100条)包含参数,可以应用于帐户。因此,账户A可以有带参数x的规则5和带参数y的规则13。帐户B可以有带参数z的规则5和带另一个参数的规则23。这并没有经过专家的分析,这就是为什么我希望在stackoverflow上得到一些提示。正如我所想的——或多或少。不要提前将其分解为10000个知识库。“不超过100”表明有一种“智能”解决方案可以避免10k规则。