drools用户指南----Cross Products
来源:互联网 发布:js replace 单引号 编辑:程序博客网 时间:2024/06/08 18:02
Cross Products
之前提到“Cross Products”一词,其实就是一个join操作(译者注:可以理解为笛卡尔积)。想象一下,火灾报警示例的数据与以下规则结合使用,其中没有字段约束:
rule "Show Sprinklers" when $room : Room() $sprinkler : Sprinkler()then System.out.println( "room:" + $room.getName() + " sprinkler:" + $sprinkler.getRoom().getName() );end
在SQL术语中,这就像是执行了select * from Room, Sprinkler,Sprinkler 表中的每一行将与Room表中的每一行相连接,从而产生以下输出:
room:office sprinkler:officeroom:office sprinkler:kitchenroom:office sprinkler:livingroomroom:office sprinkler:bedroomroom:kitchen sprinkler:officeroom:kitchen sprinkler:kitchenroom:kitchen sprinkler:livingroomroom:kitchen sprinkler:bedroomroom:livingroom sprinkler:officeroom:livingroom sprinkler:kitchenroom:livingroom sprinkler:livingroomroom:livingroom sprinkler:bedroomroom:bedroom sprinkler:officeroom:bedroom sprinkler:kitchenroom:bedroom sprinkler:livingroomroom:bedroom sprinkler:bedroom
这些连接结果显然会变得巨大,它们必然包含冗余数据。 cross products的大小通常是新规则引擎产品性能问题的根源。 从这可以看出,我们希望约束cross products,这便是用可变约束(the variable constraint)完成的。
rulewhen $room : Room() $sprinkler : Sprinkler( room == $room )then System.out.println( "room:" + $room.getName() + " sprinkler:" + $sprinkler.getRoom().getName() );end
这就使得筛选结果只有寥寥几行, 这就为每一个Room筛选出了正确的Sprinkler. 在sql中(实际上是HQL) 这样的查询约等于select * from Room, Sprinkler where Room == Sprinkler.room
.
0 0
- drools用户指南----Cross Products
- Drools--用户指南(drools训练第一课)
- Drools--用户指南(drools训练第二课)
- drools用户指南----Methods vs Rules
- drools用户指南----stateful session(有状态会话)的使用
- drools用户指南----stateless session(无状态会话)的使用
- Drools
- drools
- drools
- drools
- Drools
- drools
- Drools
- cross
- Microsoft products
- Knowlesys Products
- products.aspx
- Digital Products
- Mysql command list
- book
- excle导出
- Java操作Excel文件导入
- 【数据结构】邻接矩阵表示法的图的深度广度优先遍历递归和非递归遍历
- drools用户指南----Cross Products
- linux awk
- 程序员之素养《高质量C++/C编程指南》(一)
- Java Hashmap多线程同时操作导致的问题
- golang 语言学习
- 华为上机题之坐标移动
- python脚本设置运行参数
- 各种接口测试、jmeter、LRunner、selenium等视频分享
- IOS开发第二天-协议与委托