2010-11-19 7 views
4

J'essaie d'utiliser Drools comme moteur de règles pour un cadre de mappage de relations grammaticales à sémantiques. La base de règles dépasse actuellement les 5000 règles et sera étendue. En utilisant Drools actuellement la lecture du fichier drl contenant les règles et la création de la base de connaissances prend beaucoup de temps chaque fois que le programme est exécuté. Est-il possible de créer la base de connaissances une seule fois et de l'enregistrer dans un format persistant qui peut être rapidement chargé avec l'option de régénérer la base de connaissances uniquement lorsqu'un changement est effectué?chargement rapide d'une base de connaissances drools

Répondre

2

Oui, les baves peuvent sérialiser une base de connaissances vers un stockage externe, puis charger à nouveau cette base de connaissances sérialisée. Donc, vous avez besoin d'un cycle qui charge depuis drl, compile, sérialise. Puis un second cycle qui utilise la version sérialisée.

J'ai utilisé ceci avec un certain succès, en réduisant un temps de chargement de 1 minute 30 à environ 15-20 secondes. En outre, il réduit également vos exigences de tas/perm gen.

Vérifiez l'API pour connaître les méthodes exactes.

0

Ma première pensée est de garder la base de connaissances aussi longtemps que possible. À moins que vous ne créiez plusieurs bases de connaissances à partir de différents ensembles de règles et qu'il y ait trop de combinaisons possibles, accrochez-vous à ces bases de connaissances. Dans une application sur laquelle je travaille, une base de connaissances a toutes les règles, donc nous la traitons comme un singleton.

Cependant, si cela n'est pas possible ou si votre application n'est pas très longue, je ne sais pas si Drools lui-même fournit des moyens d'accélérer ce processus. En exécutant un projet Drools 5.0 à travers le débogueur, je vois que la base de connaissances Drools me donne Serializable. J'imagine qu'il serait plus rapide de désérialiser une base de connaissances que de ré-analyser les règles. Mais attention à la conception de votre application autour de cela! Vous utilisez des interfaces pour une raison et l'implémentation pourrait changer sans avertissement.