我正在尝试使用Drools作为语法映射框架的语法关系的规则引擎。规则库甚至现在超过5000条规则并将得到扩展。在使用Drools时,每次运行程序时,读取包含规则和创建知识库的drl文件会花费大量时间。有没有办法创建知识库一次,并以一些持久格式保存,可以快速加载选项,只有在进行更改时才重新生成知识库?
答案 0 :(得分:1)
是的,drools可以将知识库序列化到外部存储,然后再次加载此序列化知识库。
所以,你需要一个从drl加载的循环,编译,序列化。然后是第二个使用序列化版本的循环。
我已经成功地使用了它,将1分钟30的加载时间减少到大约15-20秒。此外,它还减少了堆/ perm gen要求。
检查API以获取确切的方法。
答案 1 :(得分:0)
我的第一个想法是尽可能长时间地保持知识基础。除非您从不同的规则集创建多个知识库,并且有太多可能的组合,否则请依赖这些知识库。在我工作的一个应用程序中,一个知识库具有所有规则,因此我们将其视为单例。
然而,如果那是不可能的,或者你的应用程序不是那么长时间运行,我不知道Drools本身提供了加速它的任何方法。通过调试器运行Drools 5.0项目,我看到KnowledgeBase Drools给了我Serializable。我想,反序列化知识库比重新解析规则更快。但要小心设计你的应用程序!您出于某种原因使用接口,实施可能会在没有警告的情况下发生变化。