Java から Cassandra を使ってみる その6
Windows で Cassandra を動かしてみる
Java から Cassandra を使ってみる その1
Java から Cassandra を使ってみる その2
Java から Cassandra を使ってみる その3
Java から Cassandra を使ってみる その4
Java から Cassandra を使ってみる その5
の続きです。
get_range_slices() を使ってみる
0.6 から追加された get_range_slices() メソッドのサンプルコードです。
package example.cassandra; import java.util.Date; import java.util.List; import org.apache.cassandra.thrift.Cassandra; import org.apache.cassandra.thrift.Column; import org.apache.cassandra.thrift.ColumnOrSuperColumn; import org.apache.cassandra.thrift.ColumnParent; import org.apache.cassandra.thrift.ConsistencyLevel; import org.apache.cassandra.thrift.KeyRange; import org.apache.cassandra.thrift.KeySlice; import org.apache.cassandra.thrift.SlicePredicate; import org.apache.cassandra.thrift.SliceRange; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; public class CassandraRangeSlicesExample { public static void main(String[] args) { try { // Thrift を使用して Cassandra に接続 TTransport port = new TSocket("localhost", 9160); TProtocol protocol = new TBinaryProtocol(port); Cassandra.Client client = new Cassandra.Client(protocol); port.open(); // デフォルトで用意されている Keyspace を使用する String keySpace = "Examples"; // ColumnParent には ColumnFamily 名または ColumnFamily/SuperColumn 名を指定 ColumnParent columnParent = new ColumnParent("Entries"); KeyRange keyRange = new KeyRange(); keyRange.setStart_key(""); keyRange.setEnd_key(""); // 取得数。未指定だと100? keyRange.setCount(1000); SliceRange sliceRange = new SliceRange(); // 取得カラムの範囲を指定。全部取得する場合は空の byte 配列を指定 sliceRange.setStart(new byte[0]); sliceRange.setFinish(new byte[0]); // ソート順。true : Desc、false : ASC sliceRange.reversed = false; SlicePredicate slicePredicate = new SlicePredicate(); slicePredicate.setSlice_range(sliceRange); // get_range_slices を呼ぶ List<KeySlice> results = client.get_range_slices(keySpace, columnParent, slicePredicate, keyRange, ConsistencyLevel.ONE); System.out.printf("Result size : [%d]\n", results.size()); for (int i =0; i < results.size(); i++) { KeySlice keySlice = results.get(i); System.out.printf("Key : [%s]\n", keySlice.getKey()); List<ColumnOrSuperColumn> columns = keySlice.getColumns(); for (int j = 0; j < columns.size(); j++) { ColumnOrSuperColumn result = columns.get(j); Column col = result.column; System.out.printf("[%d] カラム名:[%s] 値:[%s] タイムスタンプ:[%s]\n", j + 1, new String(col.name, "UTF8"), new String(col.value, "UTF8"), new Date(col.timestamp)); } System.out.println("--------------------"); } port.close(); } catch(Exception e){ e.printStackTrace(); } } }
keyRange.setCount(1000) しているので、事前にデータを入れておけば 1000 件表示されるようです。
Result size : [1000] Key : [575] [1] カラム名:[content] 値:[Test Content 575] タイムスタンプ:[Mon May 03 20:54:13 JST 2010] [2] カラム名:[title] 値:[Test Title 575] タイムスタンプ:[Mon May 03 20:54:13 JST 2010] -------------------- Key : [373] [1] カラム名:[content] 値:[Test Content 373] タイムスタンプ:[Mon May 03 20:54:13 JST 2010] [2] カラム名:[title] 値:[Test Title 373] タイムスタンプ:[Mon May 03 20:54:13 JST 2010] ・ ・ ・
Instant Apache Cassandra for Developers Starter
posted with amazlet at 13.06.05
Vivek Mishra
Packt Publishing
Packt Publishing