Drools 업데이트 방법이 잠재적으로 내 문제를 일으킬 수 있습니까?

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

  •  19-09-2019
  •  | 
  •  

문제

현재 Drools 5.0을 사용하여 응용 프로그램을 작성하고 있습니다. 이 응용 프로그램은 조금 느리게 실행되는 것처럼 보이지만 그 이유가 있습니다. 이 응용 프로그램은 이미 지식 세션에 저장된 사실에 대한 많은 업데이트를받습니다. 후드 아래에서 Drools 업데이트 기능은 실제로 삽입 한 다음 삽입을 수행합니다. 이 응용 프로그램에는 200 개가 넘는 규칙이 있습니다. 일부 규칙은 특정 사실이 제거 될 때 화재로 기록됩니다. 다른 규칙은 특정 사실이 지식 세션에 대해 주장 될 때 화재로 작성됩니다. 업데이트는 실제로 철회를 수행하므로 삽입 및 삽입 및 삽입 관련 규칙이 업데이트 중에 여전히 시작됩니까? 실제로 '삽입'되거나 지식 세션에서 철회되는 것은 없지만?

한 가지 주목할 사항, 나는 WorkingMemoryfilelogger를 내 지식 세션에 '연결'하여 무슨 일이 일어나고 있는지에 대한 더 나은 아이디어를 얻었습니다. 그때 나는 예상치 못한 후퇴/삽입 규칙 활성화 크레오 션이 의제에 추가되는 것을 보았지만, 활성화되지 않은 것 같습니다. 사실 업데이트는 특히 사실 모델을 기반으로 비쌀 수 있으며 드물게 사용해야하는 것 같습니다. 이 올바른지?

도움이 되었습니까?

해결책

나는 당신이 그것을 올바르게 이해했다고 생각합니다. 업데이트는 일종의 철회와 어설 싱과 비슷합니다. 가장 먼저 확신해야 할 것은 규칙이 원하는 것을 제공하는 경우입니다. 즉, 작동하지만 성능을 향상시키고 싶습니까?

어떤면에서는 불변성의 악의 일부로 업데이트를 생각할 수 있습니다 (및 "수정"키워드를 확인하십시오.) 필드 레벨 (즉, TBD)에서 추적하여 실제로 필요하지 않은 모든 활성화가 만들어지기 때문에 더 많은 작업이 필요할 수 있습니다 (실제로 가치가 변하지 않는 필드를 사용하기 때문에).

더 구체적이기 어렵습니다 - 샘플 규칙/사실 모델을 제공 한 경우 (물론 안전한 방식으로 가능하다면) 더 세분화되도록 몇 가지 아이디어를 제안 할 수 있습니다.

행운을 빕니다 !

다른 팁

가장 좋은 방법은 앱을 프로필하고 무슨 일이 일어나고 있는지 정확히 찾는 것입니다. JDK 1.6과 함께 제공되는 jvisualvm.exe와 함께 Optimizeit 또는 Jprobe와 같은 것을 사용하십시오. 추측하지 마십시오 - 더 많은 데이터를 얻으십시오.

내 경험상, 업데이트 () 메소드는 현재 실행중인 규칙의 맥락에서 WHEDE 절에 의해 엔티티가 재평가 해야하는 경우에만 필요합니다. 규칙이 입력되면 RETE 평가가 한 번에 발생하므로 일부 업데이트 () 문 (가능한 경우)을 제거하면 실행 속도가 빨라집니다. 때때로 여기에는 일부 플래그를 설정하고 나중에 규칙이 될 때까지 실제 업데이트 ()를 연기하는 것이 포함됩니다. 또한보다 기본 필터링을 위해 WHERE 절을 사용하여 현재 엔티티 상태의 일부 평가를 당시 조항의 IF 문에 넣을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top