Tenemos un sistema que tendrá decenas de miles de unidades. Cada unidad tendrá 5-10 metros y cada metro tendrá un valor asociado. Los valores de estos medidores cambian y necesitamos que nuestro motor de reglas sea capaz de responder a estos cambios en tiempo real.¿Debo usar múltiples bases de conocimiento?
Tendremos reglas del tipo "si el primer medidor de la unidad n. ° 1 es mayor que 10 y el segundo medidor de la unidad n. ° 1 es inferior a 30, entonces ...", aunque las reglas pueden ser mucho más largas que esta. Las reglas para cada unidad serán completamente independientes, por lo que no habrá reglas que condicionen los valores de dos metros diferentes de dos unidades diferentes.
Tendremos unas 30 reglas que son iguales para cada unidad, y luego cada unidad tendrá alrededor de 5-15 reglas personalizadas. Estas reglas deberán agregarse dinámicamente mientras se ejecuta el motor de reglas. Es probable que una unidad agregue 5-10 reglas cuando se registra y luego agrega o elimina una regla, como una vez por semana a partir de ese momento.
Decidimos usar Drools para esto y estoy tratando de encontrar la mejor manera de implementarlo. Soy realmente nuevo en Drools, así que estoy un poco confundido. ¿Tendría sentido que cada unidad tenga su propia base de conocimiento? Si es así, ¿hay alguna forma de compartir las reglas que son iguales para cada unidad?
Me preocupa que no tengamos suficiente memoria para almacenar todas estas reglas, así que pensé que si tuviéramos una base de conocimiento para cada unidad, podríamos serializar todas las bases de conocimiento, ponerlas en una base de datos y recupérelos cuando los necesitemos. ¿Sería eso razonable?
La otra razón por la que pensé utilizar una base de conocimientos separada para cada unidad es porque las reglas de cada unidad son completamente independientes de las reglas de cada unidad, puede haber un impacto en el rendimiento al ponerlas todas en la misma base de conocimiento. ¿Es correcto o el algoritmo Rete es lo suficientemente inteligente como para descubrirlo?
Además, ¿se están agregando dinámicamente reglas mientras el motor funciona? ¿Se deben recompilar todas las reglas? ¿Cuánto tiempo tomará y esto es factible si el motor aún necesita responder a los cambios del medidor en tiempo real?
Gracias chicos.