2013-12-18 2 views
2

RDF 트리플을 작성하기 위해 입력 데이터의 일부 조작을 수행하도록 Camel 컨텍스트를 구성했습니다.Camel을 사용하여 참깨에서 약 300.000 개의 트리플을 인덱싱합니다.

세서미 클라이언트 API를 사용하여 별도의 참깨 인스턴스 (3GB RAM이있는 Tomcat에서 실행 됨)와 통신하고 추가 명령을 전송하는 최종 경로가 있습니다 (각 명령에는 약 5 - 10 개의 문이 포함되어 있음).

프로세서가 싱글 톤으로 실행 중이고 해당 "끝"끝점에 10 개의 concurrentConsumers가 있습니다 (1, 5, 10으로 시도 - 동일한 동작).

나는 내 프로세서에서 add 명령을 보내기 위해 HttpRepository를 사용하고 있으며, 실행 중에는 색인 작업의 (점진적으로) 점진적인 성능 저하를 관찰합니다. 전반적인 프로세스는 트리플을 매우 빨리 인덱싱하기 시작합니다.하지만 약간의 시간이 지나면 커밋 된 문장이 매우 느리게 커집니다.

세서미 측에서 저는 MemoryStore와 NativeStore를 모두 사용했지만 (성능) 동작은 동일하지는 않습니다.

질문 : 경우에 reccommended되어 내가 인덱싱 단계를 가속화하고 싶은 매장 가지 종류의

  • ?
  • Repository.getConnection이 일종의 연결 풀링을 수행합니까? 즉, "추가"프로세서가 작업을 수행 할 때마다 연결을 열고 닫을 수 있습니까?
  • 먼저 내가 만든 세 개의 트리플이 모두 저장소를 만들 필요가 있다고 했으므로 원격 세서미 서버에서 관리하는 대신 (즉 HTTPRepository를 사용하지 않음) "로컬"세일 저장소를 만드는 것이 좋습니다.

답변

2

나는 4, 5 문장의 트랜잭션을 사용하여 추가한다고 가정하고 있지만 더 큰 트랜잭션을 수행하는 방법이 있으면 속도가 크게 향상됩니다. 이상적인 (그리고 가장 빠른) 단일 트랜잭션으로 상점에 300,000 개의 트리플을 모두 보내면됩니다. 순서

질문 :

  • 만 모두 기본으로 저장소의 선택은 중요하지 않습니다 30 만 문을 저장하고 메모리는 쉽게 좋은 속도로 규모의이 종류를 처리 할 수 ​​있습니다. 메모리 저장소가 약간 더 성능이 좋을 것으로 기대합니다. 특히 지속성을 위해 0이 아닌 동기화 지연을 사용하도록 구성한 경우에는 네이티브가 메모리 사용 공간이 적어 물론 더 강력합니다.

  • HTTPRepository.getConnection은 실제 RepositoryConnection 자체를 풀링하지 않지만 리소스를 내부적으로 풀링합니다. 따라서 참깨가 내부적으로 사용하는 실제 HttpConnections가 풀링됩니다. 그래서 getConnection은 상대적으로 저렴하고 여러 연결을 열고 닫을 수 있습니다. 여러 연결에 대해 동일한 연결을 재사용하여 단일 트랜잭션에서 여러 번 추가 할 수 있습니다.

  • 로컬로 저장할지 원격 서버에 저장할지 여부는 실제로 당신에게 달려 있습니다. 분명히 로컬 저장소는 네트워크 대기 시간은 물론 (비 직렬화) 비용을 없애기 때문에 더 빠를 것입니다.하지만 단점은 로컬 저장소가 자신의 응용 프로그램 외부에서 쉽게 사용할 수 없다는 것입니다.