2014-03-14 2 views
2

카산드라를 처음 사용합니다. 시나리오의 대상을 저장하여 보낼 것입니다. 예를 들어, 사람과 그의 연락처.컬렉션을 카산드라의 행으로 삽입

public boolean addContacts(String personId, Collection<Contact> contacts){ 
     // My Cassandra code to save this collection as individual rows (bulk execution) 
     return false; 

카산드라 배치는 일괄 처리로 실행될 수있는 일련의 쿼리를 기대합니다. 그러나이를 위해서는 루프를 반복하여 쿼리를 구성해야합니다. 그렇다면 컬렉션의 반복을 피하거나 최적화하는 방법이 있습니까? 나는 Couch DB에서 같은 종류의 시나리오에 대해 executeBulk를 사용했다.

답변

0

먼저 스키마를 결정해야합니다. 스키마를 작성하려면 지원하려는 u 리를 분석해야합니다. (난 그냥 작업 예제를 만들고있어, 그에 따라 단순화 된 스키마가, 당신이 선택해야 식별자)

CREATE TABLE contacts (
    person_id text, 
    email text, 
    name text 
    phone text, 
    PRIMARY KEY (person_id, email) 
) 

: 당신이 저장 인당 연락처를 검색 할 경우

, 그것은 뭔가를 할 수

이렇게하면 연락처가 person_id로 분할되고 두 번째 키 (이 경우 전자 메일)로 클러스터됩니다.

연락처를 일괄 적으로 삽입해야하는 경우 Datastax java driver을 사용하면됩니다.

PreparedStatement ps = session.prepare("INSERT INTO contacts (person_id, email, name, phone) VALUES (?, ?, ?, ?)"); 
BatchStatement batch = new BatchStatement(); 
//for each contact, bind the parameters 
for (Contact c : contacts) { 
    batch.add(ps.bind(personId, c.email, c.name, c.phone)); 
} 
session.execute(batch); 
:

이 같은 접촉을 반복해야합니다