Hibernate와 HS에 의해 지원되는 데이터를 검색하고 갱신하는 REST 서비스가있다. Lucene 지수는 150 만 개가 넘는 문서를 보유하고 있습니다.트랜잭션 커밋 후 Hibernate Search (HS)에 의한 비동기 색인화
문제점 : 서비스가 업데이트 된 데이터를 데이터베이스 ()로 유지하는 경우 HS가 데이터 인덱싱을 수행하는 것과 동일한 결과 트랜잭션이 지연 (2 ~ 5 초)되어 커밋 됨 - 데이터 업데이트 요청에 대해 HTTP 응답이 지연됩니다. REST 서비스는 많은 메소드를 가지고 있으며이 서비스를 위해 존재하는 클라이언트 측은 AJAX 호출이 리턴 된 후에 'GET'을 위해 데이터를 사용할 수 있으므로 서버 측에서 비동기식으로 트랜잭션을 커밋하는 것이 옵션이 아니라고 예상한다 (데이터 ' POST 직후 클라이언트에 사용할 수 없음).
나는 hibernate.search.default.worker.execution=async
을 사용하고 있지만이 설정은별로 도움이되지 않습니다 (개선 효과는 약 1 초입니다). 그 이유는 현재 세션/스레드를 사용하여 업데이트/생성 된 문서에 대한 데이터를 수집하고 Lucene과 비동기 적으로 색인을 생성하는 것입니다.
내 질문은 입니다. 1. HS에 의한 데이터 계산을 비동기 적으로 수행 할 수 있습니까? 실행 스레드? 따라서 트랜잭션 커밋은 데이터 수집시 고정되어 있지 않습니다. 2. 병목 상태가 자체적으로 인덱싱하지 않기 때문에 마스터/슬레이브와 JMS를 사용하여 문제가 발생하면 병목 현상이 도움이되지 않을 것이라고 생각합니다.
들으 사네 일부 디자인 의견을 제기했습니다. 이 경우 데이터 수집에는 2 초 정도의 시간이 걸리는 것이 당연합니다. 문서 당 약 1 밀리 초 정도입니다. 우리는 꽤 복잡한 관계와 많은 수의 관련 엔티티가 문서에로드되어야하기 때문에 OK라고 생각합니다. 해결책으로 우리는 당신이 추천 한 바를 정확히 사용합니다 : _ Hibernate EventListener와 Spring AsyncTaskExecutor를 사용하여 트랜잭션이 커밋 된 후 새로운 트랜잭션에서 전체 객체 그래프를 다시 읽습니다. – aillusions