cassandra jdbc의 cql이 좋기는 하지만 consistency level 를 지정할 수 있는 방법이 최근에 추가되었다.
cassandra jdbc 1.2.1이하 버전에서는 consistency level은 모두 one으로만 동작되었다. 이를 위해서 cqlsh에서 작업할 때, 아래와 같이 consistency level을 지정해 줘야 했다.
cqlsh:userkeyspace> consistency one;
Consistency level set to ONE.
그러나, cassandar jdbc 1.2.5 버전에서 이 부분이 패치가 되었다.
https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/issues/detail?id=85
https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/issues/detail?id=71
connection url에 consistent level을 지정할 수 있으며, java api를 이용해서 set/get을 할 수 있도록 해놨다.
package org.apache.cassandra.cql.jdbc;
import java.sql.Statement;
import org.apache.cassandra.thrift.ConsistencyLevel;
public interface CassandraStatementExtras extends Statement
{
public void setConsistencyLevel(ConsistencyLevel consistencyLevel);
public ConsistencyLevel getConsistencyLevel();
}
직접 하나의 예제 코드를 작성했다.
{
Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/userkeyspace?consistency=ONE");
Statement stmt = con.createStatement();
ConsistencyLevel cl = statementExtras(stmt).getConsistencyLevel();
System.out.println("consistency level : " + cl );
}
...
private CassandraStatementExtras statementExtras(Statement statement) throws Exception {
Class cse = Class.forName("org.apache.cassandra.cql.jdbc.CassandraStatementExtras");
return (CassandraStatementExtras) statement.unwrap(cse);
}
출력 결과는 consistency=??에 맞게 제대로 출력된다.
따라서 cql에서도 다양한 consistency level을 지정할 수 있다.
그러나 현재로서는 hector나 java thrif처럼 쉽게 read/write 단위로 consistency level을 지정하기는 어려운 것 같다. App에서 hector나 java thrift와 비슷하게 하려면 connection을 두개를 만들어서 read/write용으로 따로 만드면 될 것 같기는 하다. 세밀한 콘트롤이 되려면 시간이 필요할 것 같다.
* 테스트환경
- client
cassandra-driver-core-2.0.0-beta2
cassandra-thrift-2.0.1
libthrfit-0.9.1.jar
cassandra-jdbc-1.2.5.jar
- server
cassandra 2.0.1
* 참고사항
cassandra 1.2부터는 WITH CONSISTENCY LEVEL을 사용할 수 없다.
cqlsh:db_simple> SELECT * FROM test USING CONSISTENCY ONE WHERE a=1;
Bad Request: line 1:19 missing EOF at 'USING'
'nosql' 카테고리의 다른 글
cassandra java client api 선택 & 비교 (0) | 2013.11.04 |
---|---|
cassandra bench mark 자료 모음 (0) | 2013.10.31 |
cassandra 2.0(CQL 3.0/ CQLSH)에서 row 모두를 delete 하기 (delete all rows) (0) | 2013.10.30 |
nosql now 2013 후기 (1) | 2013.10.30 |
cassandra 2.0 - cql 체험기 (0) | 2013.10.25 |