2011年9月30日金曜日

CassandraでCQLを使う

少し前からCassandraに興味を持って、使い始めてます。
最初にインストールしてから0.6→0.7→0.8とめまぐるしくリリースされて困りますね。
特に0.8でCQLの登場にはちょっと愕然としました。
なんだよー。そーゆーことやるんなら最初から出せよー。ってな具合で。。。

もう古いバージョンのメモを残してもしゃーないので、CQLを使ったアクセスからメモをしていこうと思っとる次第です。

package com.zomu.t.cql;

import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.Compression;
import org.apache.cassandra.thrift.CqlResult;
import org.apache.cassandra.thrift.CqlResultType;
import org.apache.cassandra.thrift.CqlRow;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;

public class CassandraAccessSample {

 public static void main(String[] args) {
  try {
   TSocket transport = new TSocket("localhost", 9160);
   TFramedTransport framedTransport = new TFramedTransport(transport);
   TProtocol protocol = new TBinaryProtocol(framedTransport);
   Cassandra.Client client = new Cassandra.Client(protocol);
   transport.open();

   client.set_keyspace("TestKeySpace");
   CqlResult result = client
     .execute_cql_query(
       ByteBufferUtil
         .bytes("select * from CF where key = key_1;"),
       Compression.NONE);
   if (CqlResultType.ROWS.equals(result.getType())) {
    System.out.println("HIT->"+result.rows.size()+"\n");
    for (CqlRow row : result.rows) {
     for (Column col : row.columns) {
      System.out.println(ByteBufferUtil.string(col.name) + "="
        + new String(col.getValue()));
     }
     System.out.println("-----------------");
    }
   }
   transport.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
 

今回はCassandraのサンプルで一般的にあるThriftを利用したクライアントで接続する方法です。
Webアプリケーション等でCassandraを使用する場合にはこのような接続方法は推奨されません。
僕はしてて、かなりひどい状態になりました。。。。

CassandraのWikiを見ると、高度なクライアントなんて感じで紹介されているので使っていこうかと思います。
予定ではHector

0 件のコメント:

コメントを投稿