我们有一个拥有数万个单元的系统。每个单位将有 5-10 米,每个米将有一个与之关联的值。这些仪表的值发生变化,我们需要我们的规则引擎能够实时响应这些变化。
我们将有这样的规则:“如果单元#1 的第一个仪表大于10,单元#1 的第二个仪表小于30,则......”,尽管规则可能比这长得多。每个单元的规则将是完全独立的,因此不会有规则以来自两个不同单元的两个不同仪表的值为条件。
我们将为每个单元设置大约 30 条相同的规则,然后每个单元将有大约 5-15 条自定义规则。这些规则需要在规则引擎运行时动态添加。一个单位很可能会在注册时添加 5-10 条规则,然后从那时起每周添加或删除一条规则。
我们决定为此使用 Drools,我正在尝试找出如何最好地实现它。我对 Drools 真的很陌生,所以我有点困惑。每个单元都有自己的知识库有意义吗?如果是这样,有没有办法共享每个单元相同的规则?
我担心我们可能没有足够的内存来存储所有这些规则,所以我在想如果我们为每个单元都有一个知识库,我们可以将所有知识库序列化,将它们放入数据库中,并在我们使用时检索它们需要他们。那会合理吗?
我考虑为每个单元使用单独的知识库的另一个原因是,每个单元的规则完全独立于其他单元的规则,将它们全部放入同一个知识库可能会影响性能。这是正确的还是 Rete 算法足够聪明来解决这个问题?
此外,是否可以在引擎运行时动态添加规则?是否必须重新编译所有规则?如果发动机仍需要实时响应仪表变化,这需要多长时间?这是否可行?
多谢你们。