Podría el método de actualización Drools ser potencialmente causando mis problemas

StackOverflow https://stackoverflow.com/questions/1183184

  •  19-09-2019
  •  | 
  •  

Pregunta

Actualmente estoy escribiendo una aplicación que utiliza Drools 5.0. Esta aplicación parece estar funcionando un poco lento, pero tengo una teoría por qué. Esta aplicación recibe muchas actualizaciones para los hechos ya almacenados en la sesión de conocimiento. La función de actualización Drools bajo el capó realmente hace una retracción entonces una inserción. Esta aplicación cuenta con más de 200 reglas. Algunas de las reglas están escritas para disparar cuando se eliminan ciertos hechos. Otras reglas están escritas para disparar cuando ciertos hechos se afirman en la sesión de conocimiento. Desde la actualización realmente una retracción después de inserción de las reglas de retracción y de inserción relacionada todavía disparar durante una actualización? A pesar de que nada es realmente ser 'insertado' o retira de la sesión de conocimiento?

Hay que destacar, que 'enganchado' el WorkingMemoryFileLogger a mi sesión de conocimiento para tener una mejor idea acerca de qué se está encendiendo. Fue entonces cuando vi un montón de creaciones de activación regla de retracción / inserción inesperados que se agregan a la orden del día, pero parece que no siempre se activan. Me parece que los hechos actualización puede ser costoso, especialmente sobre la base de su modelo de hecho, y debe utilizarse con moderación mí. ¿Es esto correcto?

¿Fue útil?

Solución

Creo que han entendido correctamente. Una actualización es algo así como un retracto además una aserción. El primero que hay que estar seguro es de si sus reglas que lo que desea están dando - es decir, no funciona, sino que sólo quieren mejorar el rendimiento?

En cierto modo se puede pensar en una actualización (y también comprobación la palabra clave "modificar" ..) como parte de los males de la inmutabilidad;) Al actualizar - le dice la red que el hecho ha cambiado, pero doesn 't todavía seguirlo a nivel de campo (es decir TBD) por lo que puede causar más trabajo, entonces es necesario ya que se crean todas estas activaciones que no están realmente necesario (ya que están utilizando los campos que en realidad no cambian en valor).

Es difícil ser más específicos - si proporcionó algunos / modelo de reglas de ejemplo hecho (si se puede de una manera segura, por supuesto!) Que puede ser capaz de sugerir algunas ideas para descomponerlo a ser más granular.

Buena suerte!

Otros consejos

La mejor manera de saber es el perfil de la aplicación y saber exactamente lo que está sucediendo. Usar algo como Optimizeit o JProbe en combinación con el jvisualvm.exe que se incluye con JDK 1.6. No trate de adivinar -. Obtener más datos

En mi experiencia, el método de actualización () sólo es necesario si necesita una entidad para ser reevaluado por la cláusula WHERE en el contexto de la regla que se está ejecutando. Dado que la evaluación RETE pasa todo a la vez a la entrada de la regla, la eliminación de algunas declaraciones de actualización () (en lo posible) acelerará su ejecución. A veces esto implica el establecimiento de algunas banderas y posponer la actualización real () hasta que una norma posterior. También puede poner un poco de la evaluación de los estados actuales de la entidad en una sentencia if en la cláusula Luego, utilizando la cláusula WHERE para filtrar más básico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top