2017-09-27 3 views
0

Google에서 검색했지만 Cassandra 읽기 측면 문서 페이지 이외의 링크가 없습니다. 그래서, 배치 행 삽입을 위해 Akka-Cassandra 패키지에 이미 포함 된 API 또는 함수가 있는지 묻고 싶습니다. 또는 여러 행 삽입을 위해 삽입 코드를 여러 번 호출해야합니다.Lagom-Scala의 일괄 삽입 Cassandra readside

참고 : - 여러 이벤트를 삽입하는 것에 대해 묻지 않고 일부 json 데이터를 키 쌍 형식으로 저장하려고합니다. 따라서 Json 객체가 포함 된 단일 이벤트에는 여러 행이 필요할 수 있습니다. PHP와 다른 언어에서 우리는 여러 행을 갖는 Array를 제공 할 수 있습니다. 그러나 Akka의 Cassandra 드라이버 구현은 어떻게 이것을 제공합니까?

답변

0

Lagom의 읽기 측은 한 번에 하나씩 이벤트를 처리합니다. 일괄 처리 삽입이 가능한 유일한 시나리오는 이벤트를 메모리에 유지하고 일괄 처리가 시간 초과 또는 설정이 충분히 클 때 지속되는 경우입니다. 충돌이 발생하면 이벤트 스트림은 사용 된 이벤트를 고려하지만 메모리의 데이터는 지속되지 않으므로이 방법은 데이터 손실 (또는 대부분의 경우 한 가지 의미)이 발생하기 쉽습니다.

Lagom 기본값은 각 이벤트 처리를 lagom 내에서 읽기 측 테이블과 오프셋 저장소를 업데이트하는 사용자 제공 코드가 포함 된 단일 트랜잭션으로 처리합니다. 이 접근법은 사용자가 제공 한 모든 작업이 트랜잭션 내에서 발생하는 경우 효과적으로 한 번 읽기 측 처리를 허용합니다.

제안 된 접근 방식은 영구 엔티티 태그를 분할하여 영구 엔티티 이벤트 스트림을 여러 읽기 사이드 프로세서 인스턴스에서 동시에 사용할 수 있도록하는 것입니다. 이 솔루션을 사용하면 각 인스턴스가 한 번에 하나씩 이벤트를 처리하지만 많은 인스턴스가 클러스터에 분산됩니다.

+1

죄송합니다. @ ignasi35 내 질문을 다른 방식으로 이해했습니다. 질문을 업데이트했습니다. –

0

CassandraSession은 일괄 쓰기에 필요한 모든 것을 제공합니다. 즉, CassandraSession#prepare 다음에 CassandraSession#executeWriteBatch이옵니다. 이 같은

뭔가 : 말했다

PreparedStatement ps = session.prepare(...); 
BatchStatement batch = new BatchStatement(); 
batch.add(ps.bind(...)); 
batch.add(ps.bind(...)); 
session.executeWriteBatch(batch); 

는 사이드 핸들러를 읽어 통지는 이벤트 핸들러 메서드에서 List<BoundStatement>을 반환하는 CassandraReadSide 필요를 사용하여 구축. Lagom은 이러한 명령문을 일괄 적으로 자동 실행합니다.

+0

Thanks @pazustep 샘플 스칼라 코드도 함께 나눌 수 있습니까? 'batch.add (..) '를 호출하여 동일한 객체의 데이터를 변경하기 때문에 불변성을 지원합니까? –