我正在尝试使用Drools作为语法关系到语义映射框架的规则引擎。即使是现在,规则库也超过了5000条规则,而且还会继续扩展。目前,在使用Drools时,每次运行程序时,读取包含规则的drl文件并创建知识库需要花费大量时间。有没有一种方法,只需创建一次知识库,并将其保存为某种持久格式,即可使用仅在发生更改时才重新生成知识库的选项快速加载该格式?
发布于 2010-11-30 12:40:45
是的,drools可以将知识库序列化到外部存储,然后再将这个序列化的知识库重新加载进来。
因此,您需要一个从drl加载、编译、序列化的循环。然后是使用序列化版本的第二个周期。
我使用这个方法取得了一些成功,将1分30秒的加载时间减少到了大约15-20秒。此外,它还减少了堆/perm生成需求。
检查API以获取确切的方法。
发布于 2010-11-22 13:14:31
我的第一个想法是尽可能长时间地保留知识库。除非您从不同的规则集创建多个知识库,并且有太多可能的组合,否则请保留这些知识库。在我工作的一个应用程序中,一个知识库包含所有规则,因此我们将其视为单例。
但是,如果这是不可能的,或者您的应用程序不是那么长时间运行,我不知道Drools本身提供了任何加速的方法。通过调试器运行一个Drools5.0项目,我发现KnowledgeBase Drools提供给我的是可序列化的。我想反序列化KnowledgeBase会比重新解析规则更快。但是要小心围绕这一点设计你的应用程序!您使用接口是有原因的,并且实现可能会在没有警告的情况下发生变化。
https://stackoverflow.com/questions/4223372
复制相似问题