我参与了我们经常使用 SQL 访问数据仓库并根据某些规则进一步处理数字的项目。这些规则目前是通过存储过程或类似的东西来实现的。
我没有使用过 Drools,也没有接触过它。
我特别感兴趣的是,是否可以使用它为大量销售交易分配信用。
如果有这种用法的例子,请告诉我。
谢谢。
我参与了我们经常使用 SQL 访问数据仓库并根据某些规则进一步处理数字的项目。这些规则目前是通过存储过程或类似的东西来实现的。
我没有使用过 Drools,也没有接触过它。
我特别感兴趣的是,是否可以使用它为大量销售交易分配信用。
如果有这种用法的例子,请告诉我。
谢谢。
Drools 是一个 Rete 规则引擎。我看不出它与持久数据的大规模更新有什么关系。
它可以包含确定何时分配该信用是正确的规则,但它不是执行更新的工具。那是数据库问题。
这不是执行这些规则的唯一选择。您也可以选择使用在 INSERT/UPDATE 时执行的数据库触发器来执行此操作。
更新: Drools 和存储过程是互斥的。一个是服务器端技术,另一个在数据库中运行。您必须决定在哪里执行您的业务逻辑。
存储过程的问题在于它将您与该数据库供应商联系在一起,并且它在数据库事件上执行,例如 BEFORE 或 AFTER INSERT 或 UPDATE。它不会知道您的业务事件,例如“规则告诉我此人有资格获得信用”,除非您将其嵌入存储的过程代码中。
如果你这样做,你就不需要 Drools。两者相互排斥或冗余。
Drools 被大量用于分配信用,所以我相信你会发现在那里编写信用规则非常有用(在版本之间更改它们,甚至让信用专家自己用 Guvnor 编写它们)。
至于在您的数据库中的实现:
在将销售记录保存到业务层(服务器端)之前应用信用规则。如果你有一个 3 层架构(客户端 - java 服务器 - 数据库),这应该很容易。您可能想使用 a StatelessSession
(但只实例化KnowlegdeBase
一次)。
使用 boolean 标记销售记录alreadyCreditChecked
false
,向单独的进程发送信号,该进程提取尚未检查的那些并检查它们。