2017-03-20 5 views
0

나는 카산드라 자바 드라이버을 사용하고 있습니다.카산드라 바흐 쿼리 일관성

다른 파티션 키가있는 다양한 Cassandra 테이블에 데이터를 일괄 적으로 삽입하는 유스 케이스가 있습니다.

배치 문에 20 개의 쿼리가 있고 15 개의 쿼리가 제대로 실행되고 5 개의 쿼리가 실패했습니다.

어떤 쿼리가 실패했으며 어떤 쿼리가 실행되었는지 어떻게 알 수 있습니까?

성능 측면에서 나는 executeAsync을 사용하고 있습니다.

< EDIT1 :>

우리는 '로깅되지 않은 일괄 질의'를 사용하고 있습니다.

+0

작은 배치 크기를 유지하려고에 새로운 연결 설정이 없다. http://stackoverflow.com/questions/34699841/what-is-the-batch-limit-in-cassandra –

답변

2

로깅 된 다중 파티션 배치는 원자 적이지만 성능은 저하됩니다. 공식 카산드라 문서에서 :

배치는 기본적으로 원자 적입니다. Cassandra 배치 작업의 컨텍스트에서 원자는 일괄 처리가 성공하면 모두 을 의미합니다.

따라서 모든 검색어가 성공하거나 아무 것도 표시되지 않습니다.

로깅되지 않은 다중 파티션 배치는 원 자성이 아닙니다. 비동기 적으로 각 쿼리를 실행하고 결과를 개별적으로 수집하거나 동일한 파티션 키로 수집 한 다음 로그 된 배치로 실행하십시오. 예를 들어

:

List<String> queries = new ArrayList<>(); 

    List<ResultSetFuture> results = queries.stream() 
      .map(query -> session.executeAsync(query)) 
      .collect(Collectors.toList()); 

    results.stream() 
      .map(result -> { 
       try { 
        return Optional.ofNullable(result.getUninterruptibly()); 
       } catch (Exception ex) { 
        // do smth 
        return Optional.empty(); 
       } 
      }) 
      .forEach(//do Something); 

또한 자바 클라이언트 연결 풀링을 켜, 각각의 쿼리 항상 http://docs.datastax.com/en/developer/java-driver/2.1/manual/pooling/

+0

만약 그들이 '하나의 파티션'키 –

+0

의 경우 배치가 원자라고 생각하지만 나의 사용 케이스 바흐 쿼리는 쿼리가 포함되어 있습니다 다른 부분 분할에 속함 –

+0

이것은 일괄 처리 문의 흔한 오용입니다. https://medium.com/@foundev/cassandra-batch-loading-without-the-batch-keyword-40f00e35e23e#.x8t4t329p –