문제

우리는 매우 집약적인 처리 애플리케이션에서 일종의 필터 역할을 하는 솔루션의 일부로 Drools를 사용했습니다. 아마도 500,000개가 넘는 작업 메모리 개체에 대해 최대 100개의 규칙을 실행할 수도 있습니다.매우 느린 것으로 나타났습니다.일괄 처리 애플리케이션에서 Drools를 사용한 경험이 있는 사람이 있습니까?

도움이 되었습니까?

해결책

나는 Drools의 최신 버전으로 작업해 본 적이 없지만(마지막으로 사용한 것은 약 1년 전이었습니다) 당시 우리의 고부하 벤치마크에서는 Drools가 완전히 느린 것으로 나타났습니다.우리 아키텍처의 대부분을 이에 기반으로 삼았기 때문에 큰 실망이었습니다.

drools에 대해 내가 기억하는 최소한 좋은 점은 그들의 개발팀이 IRC에서 도움을 받을 수 있었고 매우 도움이 되었다는 것입니다. 시도해 볼 수도 있습니다. 그들은 결국 전문가입니다. irc.codehaus.org #drools

다른 팁

종류는 규칙에 따라 다릅니다. 메모리가 충분하면 500K 개체가 합리적입니다(RETE 네트워크를 메모리에 채워야 하므로 메모리 사용량은 500K 개체의 배수입니다. 즉 개체 공간 + 네트워크 구조, 인덱스 등을 위한 공간). 아마도 당신은 정말 느린 디스크로 페이징하고 있을 것입니다.

물론, 동일한 유형의 사실 조합과 일치하는 규칙이 있으면 시도할 조합이 폭발적으로 발생할 수 있으며, 이는 규칙이 1개 있어도 정말 느려질 것입니다.수행 중인 분석에 대한 추가 정보가 있다면 가능한 솔루션을 찾는 데 도움이 될 것입니다.

저는 100만 개가 넘는 사실을 포함하는 상태 저장 작업 메모리가 있는 Drools를 사용했습니다.규칙과 기본 JVM을 모두 조정하면 초기 시작 시 몇 분 후에 성능이 상당히 좋아질 수 있습니다.더 자세한 내용을 원하시면 알려주세요.

나는 단지 군침을 흘리는 중이므로 뭔가 빠졌을 수도 있지만 왜 50만 개의 개체 전체 배치가 작업 메모리에 한 번에 추가되는 걸까요?내가 생각할 수 있는 유일한 이유는 배치에 있는 두 개 이상의 항목이 관련될 때만 시작되는 규칙이 있다는 것입니다.

그렇지 않은 경우 상태 비저장 세션을 사용하여 한 번에 하나의 개체를 어설션할 수 있습니다.이 경우 규칙이 500,000배 더 빠르게 실행될 것이라고 가정합니다.

그러한 경우에도 모든 규칙에서 모든 500,000개 개체에 액세스해야 합니까?한 번에 하나씩 항목별 규칙을 적용한 다음 처리의 두 번째 단계에서 다른 규칙 베이스와 작업 메모리를 사용하여 배치 수준 규칙을 적용하여 작업 속도를 높일 수 있습니까?이는 데이터의 양을 변경하지 않지만 간단한 규칙이 제거되었기 때문에 RETE 네트워크는 더 작아질 것입니다.

대안적인 접근 방식은 관련 객체 그룹을 식별하고 두 번째 단계에서 객체를 그룹으로 어설션하여 작업 메모리의 데이터 양을 더욱 줄이고 RETE 네트워크를 분할하는 것입니다.

Drools는 실제로 수많은 개체에서 실행되도록 설계되지 않았습니다.몇 가지 개체에 대해 복잡한 규칙을 실행하는 데 최적화되어 있습니다.

각 추가 개체에 대한 작업 메모리 초기화가 너무 느리고 캐싱 전략이 작업 메모리 개체별로 작동하도록 설계되었습니다.

수천 개의 개체를 구문 분석한 후 OutOfMemory 오류 문제가 발생했습니다.다른 기본 최적화 프로그램을 설정하면 문제가 해결되었습니다.

OptimizerFactory.setDefaultOptimizer(OptimizerFactory.SAFE_REFLECTIVE);

우리도 drools를 보고 있었지만 우리에게는 개체 수가 적기 때문에 문제가 되지 않습니다.메모리 사용량을 더 고려하고 동일한 알고리즘을 기반으로 하면서 속도에 최적화된 동일한 알고리즘의 대체 버전이 있다는 것을 읽은 기억이 납니다.하지만 그 중 어떤 것이 실제 사용 가능한 라이브러리로 만들어졌는지는 확실하지 않습니다.

상태 비저장 세션을 사용하고 객체를 한 번에 하나씩 추가하시겠습니까?

이 Optimizer는 매개 변수 -dmvel2.disable.jit = true를 사용하여 설정할 수도 있습니다.

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