문제

나는 웹 응용 프로그램을 수신하는 메시지를 통해 인터페이스는 HTTP,예를 들어:

http://server/application?source=123&destination=234&text=hello

이를 요청의 ID 를 포함합 보낸 사람,ID 받는 사람과의 텍스트 메시지입니다.

이 메시지를 처리해야 합니다 다음과 같:

  • 을 찾는 일치하는 사용자 객체 모두에 대한 소스 및 대상에서 데이터베이스
  • 을 만들의 나무 개체:는 메시지가 필드가 포함한 메시지에 텍스트와 두 개의 사용자 개체 위해 원본 및 목적지
  • 지속가 이 나무 데이터베이스.

트리드됩니다 다른 응용 프로그램에 의해할 수 없는 터치.

나는 사용으로 오라클의 백업 데이터베이스 및 JPA 와 Toplink 를 위한 데이터베이스의 처리 작업입니다.가능하면 나는 숙박이다.

없이 많은 최적화를 이룰 수 있었다~30 청/sec 처리량에서 나의 환경입니다.하고 있지 않습니다,나는 필요~300 요청/sec.그래서 측정된 성능 병목 현상이 발견되는 통화 em.persist() 대부분의 시간입니다.면 나는 단순히 주석으로 하는 라인,처리량을 잘 1000 요청이/sec.

도 쓸 작은 테스트를 사용하는 응용 프로그램 간단한 JDBC 통화를 지속하는 1 만 달러의 메시지를 같은 데이터베이스입니다.내가 사용하는 일괄 처리,의미했 100 삽입 후 commit 및될 때까지 반복하는 모든 레코드에 데이터베이스입니다.내가 측정~500 개 요청/sec 처리량에서 이 시나리오를 것이라고,나의 요구를 충족.

그것은 내가 필요로 하는 최고의 삽입 성능 여기에.그러나 앞서 언급했듯이 나 같은 것을 사용하여 유지 JPA 및 Toplink 이를 위해,순수하지 않은 JDBC.

당신이 알고있는 방법을 만들 배치를 삽입 JPA 및 Toplink?추천할 수 있습니다 다른 기술 개선을 위한 JPA 계속 성과?

추가 정보:

청"/sec"의미기:요청의 총 수/총 시간의 시작 부분에서 테스트를 마지막 기록 데이터베이스에 기록.

나는 전화 em.persist() 비동기에 의해 생성 메모리 큐로 사 servlet 물건과 persister.그것은 도왔다.그러나 큐로 성장했 정말 빠른 응용 프로그램을 받~200 요청/초 지속적으로,그것은 허용되지 않습 나를 위한 솔루션입니다.

이 분리된 접근 방식을 수집에 대한 요청은 100 밀리초 불 em.persist() 에서 모든 수집 항목 커밋하기 전에 트랜잭션.EntityManagerFactory 가 캐시되 각 사이 트랜잭션이 있습니다.

도움이 되었습니까?

해결책

당신이해야에서 분리 JPA 인터페이스를 사용하여 벌거벗은 TopLink API 를 사용합니다.할 수 있습 척 개체 당신은 유지하으로 UnitOfWork 투입 UnitOfWork 에는 일정(동기식 또는 비동기식).참고 하나의 비용의 em.지속()는 암시적 복제는 발생의 전체 개체 그래프입니다.TopLink 일할 것이 오히려 더 나은 경우에 당신은 uow.registerObject()두 사용자의 개체,자신이 저장 자체의 정체성을 테스트하지 않습니다.그래서 당신은 겁니다:

uow=sess.acquireUnitOfWork();
for (job in batch) {
 thingyCl=uow.registerObject(new Thingy());
 user1Cl=uow.registerObject(user1);
 user2Cl=uow.registerObject(user2);
 thingyCl.setUsers(user1Cl,user2Cl);
}
uow.commit();

이것은 아주 오래 된 학교 TopLink btw;)

참고하는 배치에 많은 도움이 될 것입니다 때문에 배치 쓰기와 더 특히 배치 쓰기 매개 변수는 바인딩을 걷는 이를 위해 간단한 예제는 아마에 매우 큰 영향을 미치의 성능이다.

다른 것을 찾는다:의 시퀀싱 크기입니다.이 많이 소요되는 시간을 쓰체에서 TopLink 은 실제로 읽기 시퀀싱은 정보를 데이터베이스에서,특히 작은 기본값(나는 것 아마 몇 백 명의 또는 더 나은 시퀀스 크기).

다른 팁

의 측정은 무엇입청"/sec"?다시 말해서,어떤 일에 대한 요청 31?무슨 자원이 차단되나요?는 경우 그것은 프런트 엔드/servlet/웹 부분을 실행할 수 있습니다.지속()다른 스레드에서하고 즉시 반환?

또한,당신은 당신들의 트랜잭션을 시간은?당신은 당신을 만드는 EntityManagerFactory 체로 각각의 요청이 있으십니까?

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