- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在浏览 Drools 文档,发现它没有做任何有趣的事情/解决任何问题(可能是我错了)。
在 drools 中,我们指定业务规则(在 .drl 文件中),例如,
when "type = jewellery" then setDiscount(25%)
when "type = KidDress" then setDiscount(30%)
上述与使用数据库有什么区别?
我始终可以公开自定义 API,从中可以指定业务规则,并且可以将其直接存储在 RDBMS 中。正式来说,如果需要,我可以构建一个与公开的 API 集成的示例 UI(1-2 天内)。如果我公开 CRUD 操作,这也将允许业务人员轻松添加/更新/删除规则。
对于像我解释的那样简单的事情,Drools 正在解决什么问题?我在 g-search/官方文档中找不到任何文档。
有人可以帮忙吗?
最佳答案
与 Karol 的回答相反,我也使用了 Drools,但我对它们有很好的体验。文档中的用例被有意简化,但 Drools 还可以比数据库更有效地处理更复杂的用例。我确实知道这一点,因为我用大约 140 万条规则维护的服务已转换为使用数据库(使用您提供的相同参数)。它从平均 30-100 毫秒响应查询,到花费 750 毫秒到超过 2 分钟响应(我不知道需要多长时间,因为我们在 2 分钟后查询超时。)
原因是 Drools 允许我们实现“失败”逻辑。在本例中,我的 140 万条规则决定住院患者是否需要获得保险授权才能在医院进行手术。规则范围从非常笼统到非常具体;如果两个规则与输入数据匹配,我们倾向于更具体的规则。如果特定医院或医院+保险组合具有自定义规则,则适用特殊用例。我们传递了我们所了解的有关患者的所有数据、他们的整个病史以及有关他们的保险的大量信息,然后规则决定了答案。
想象一下这个故意简化的场景:
rule "Car"
when
Car() // very simple, I have a car
then
setPrice(100)
end
rule "Red Car"
when
Car( color == "red" ) // I have a red car
then
setPrice(75)
end
rule "4-door Car"
when
Car( doors == 4 ) // I have a 4-door car
then
setPrice(200)
end
rule "Red Sedan"
when
Car( color == "red", model == "sedan") // I have a red sedan
then
setPrice(500)
end
rule "Blue 4-Door Discount"
when
Car( doors == 4, color == "blue") // I have a blue 4-door car
then
setPrice(150)
end
现在我们开始在汽车的不同配置中进行游戏。黄色轿车2门跑车只符合第一个规则,价格为100。红色4门轿车符合两个规则;价格是75还是200?取决于您如何编写规则以及“设定价格”的作用;可能在我写的规则中价格是200。一辆蓝色轿车? 100.等等。
如果我们将其转换为数据库表(为简单起见,一个包含“颜色”、“型号”和“门”列的 Car 表),该查询会是什么样子? (我实际上不知道我没有设法编写一个足够的查询;我也不是 DBA。)
我可以举出一整套示例,其中基于数据库的解决方案性能较差,或者根本不推荐。例如,我曾经使用规则实现了伪 BFS 算法,以找出从任意硬件配置到最新支持配置的最佳升级路径。 (每个版本只能升级到不同的其他版本,因此我们需要找出从给定版本到目标版本的最快路径(如果可能的话)。)这可以在数据库中完成吗?有可能,但这不是关系数据库擅长的事情。代码呢?当然可以,但现在您必须在代码中管理可以升级到什么的列表。
对于极其简单的规则集,其中每个规则都是完全排他的并涵盖所有用例?当然,数据库可能会性能更高。然而,现实世界的情况要么需要过于复杂的查询,要么可能根本不合适。
还有决策表?不惜一切代价避免它们。它们加载速度慢,执行速度慢,占用的内存比需要的多,如果尝试大规模使用它们,就会遇到未记录的限制,并且调试它们很痛苦。
关于java - Drools引擎和数据库之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60936309/
Drools中物理包和包声明有什么用。 例如, 我有一个规则,物理包com.mycompany中的Myrule.drl 据我所知,drools 中的包声明不依赖于文件所在的实际物理包。 所以我可以将
我是 drools 的新手,并且熟悉使用 extends 关键字来继承规则。问题有没有办法继承多个规则?这类似于在 java 类上使用多个接口(interface)。这是我希望它如何工作的示例,但我在
我们使用 Drools 作为解决方案的一部分,在非常密集的处理应用程序中充当一种过滤器,可能在 500,000 多个工作内存对象上运行多达 100 条规则。 事实证明它非常慢。 其他人有在批处理类型处
我是 Drools 的新手,正在尝试让示例程序正常工作。drools 文档 http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert
我正在使用 drools-camel-server 5.4 Final 来执行从 jboss AS7 上的 guvnor 获取的规则,如下所示: 如何重新加载或重建知识库
我想将我的 .drl 文件预编译为 .class 文件,这样它们就不必在运行时编译。文档使它听起来像 kie-maven-plugin 这样做,但它没有为我生成任何东西。它编译规则文件但不输出任何内容
我正在尝试使用 Drools 向后链接来找出需要哪些事实才能将对象插入到工作内存中。在下面的示例中,我期望得到事实“go2”。 rule "ins a" when String( this =
是否可以通过规则名称触发 drool 文件中的规则?我的要求是,我的规则文件将包含所有规则的列表 (S)。但我有一个单独的配置,其中包含要触发的规则名称列表 (A)。注意 (A) 是 (S) 的子集。
我的项目使用 drools 专家手段 (DRL) 文件。在规则文件中,如果用户想删除和更新规则,应该怎么办? 规则文件: package com.sample; import com.sample.T
我被要求开始探索用于某些客户端演示的 Activiti 工具。 该演示还将包含与 Activiti 集成的 JBoss Drools。 我对这两种工具和业务流程世界都不熟悉,所以如果问题很愚蠢,请原谅
Ciao,我已经测试了几种方法,但我仍然无法在Drools Fusion中测试和验证事件过期机制,所以我正在寻找一些指导,好吗? 我已经阅读了手册,我对这个功能很感兴趣: In other words
我试图在 Drools 6.5 中创建两个独立的规则组,但我无法弄清楚规则流组和议程组策略的用例是什么。他们两个看起来很相似。 最佳答案 阅读文档... 2.6.4. RuleFowGroup 和 A
我是 Drools 新手。我正在创建规则,但出现编译时错误 "field is not visible'. 我尝试检查 Jboss 示例,其中使用方言“mvel”。它编译了。我听不懂方言。那么 dia
我正在尝试设置 kie 执行服务 (kie-server-services-6.2.0) 以供 kie-drools-wb-webapp-6.2.0 提供,当我尝试通过以下 webapp url执行服
我想实现规则引擎,其中如果仅执行一个条件,则它不会检查其他指定的条件。 rule "Print out lower-case tokens" when Token ( coveredText
我拥有所有必需的 JAR。尽管面临以下问题: java.lang.ClassCastException: org.drools.io.impl.ClassPathResource cannot be
我正在尝试 Redhat Drools,并且能够在 WildFly 环境中部署 Drools Workbench。我试图找出如何将规则公开为服务,但找不到关于如何做到这一点的文章。这是对 Drools
在使用 Drools 5.5 final 比较字符串值字段时,我遇到了一些令人费解的问题。 本质上,我试图找出是否有一对同名的人。 Person 类如下所示: public class Person
我正在寻找一个好的规则引擎。 我已经看到它存在两个好的项目:JBPM和Drools。 我不太了解两者之间的区别,也不知道要使用什么理想工具。 请您向我提供更多信息以及您在其他方面的经验,以及您认为最适
我们可以在 Excel 表格中编写 Drool 规则吗?规则可以用于简单的人类可读内容吗?如果我们可以,那该怎么做呢?请解释。 最佳答案 是的,你可以。阅读用户指南中名为“电子表格中的决策表”的部分如
我是一名优秀的程序员,十分优秀!