ヒマをみつけてWeb開発
その場の思い付きを、ヒマをみつけてWebサイトにしてみるブログ

Cassandraemon初の0.7系リリース

Wednesday, 13 April 2011 04:34 by sabro

Cassandraemonの初の0.7系対応バージョンをリリースしました。

Cassandraemon - Download: Cassandraemon 0.7.4

バージョンが0.7.4になってますが、Thrift APIが0.7.4バージョンのものを使っているからであって、実質的にCassandra0.7に対応する初のリリースです。新機能は、New Feature - ver 0.7に書いてありますが、英語なので、簡単に日本語で説明しときます。

New Link Style

Cassandraのカラム名はByte配列であるため、Cassandraemon0.6では、比較の際、ToCassandraByte関数を呼んだり、GreaterThanOrEqual関数を呼んだりする必要がありました。0.7ではCassandraBinaryという、各種演算子をオーバーロードしたByte配列のラッパークラスを作成することで、LINQをシンプルに書けるようにしました。

// ver 0.6
from x in context.ColumnList
where x.ColumnFamily == "Product" &&
      x.Key == "key1" &&
      x.SuperColumn == "sc1".ToCassandraByte() &&
      x.Column.GreaterThanOrEqual(1)
select x;

// ver 0.7
from x in context.ColumnList
where x.ColumnFamily == "Product" &&
      x.Key == "key1" &&
      x.SuperColumn == "sc1" &&
      x.Column >= 1
select x;

Secondary Index

Cassandra0.7の目玉機能、Secondary Indexに対応しました。Where句に以下のように指定することで、事前に作られたインデックスを使って値を取得できます。

from x in context.ColumnList
where x.ColumnFamily == "Product" &&
      x.Index["ColumnName1"] == "col1" &&
      x.Index["ColumnName2"] >= 1 &&
      x.Index["ColumnName3"] < DateTime.Now &&
      x.Column.In("ColumnName1", "ColumnName2")
select x;

Live Schema Update

Live Schema Updateに対応しました。といっても、ThriftのApiをラップしたものを、CassandraContextクラスに用意しただけです・・・。

class CassandraContext
{
	public string SystemAddKeyspace(KsDef ksDef)
	public string SystemUpdateKeyspace(KsDef ksDef)
	public string SystemDropKeyspace(string keyspace)
	public string SystemAddColumnFamily(CfDef cfDef)
	public string SystemUpdateColumnFamily(CfDef cfDef)
	public string SystemDropColumnFamily(string columnFamily)
	public void Truncate(string columnFamily)
}

TTLに対応

カラムの生存時間を指定するTTLに対応しました。といっても、ウチが何かしたわけじゃなくて、ThriftAPIのColumnクラスにTTLプロパティが追加されただけです。一応、List<Column>クラスに、全てのリスト内のColumnに対してTTLをセットする拡張メソッドを追加したりはしてます。

multiget_coutに対応

Keyを複数指定して、CountColumn<TKey>メソッドを呼ぶことで、複数行のCountを一気に取ってこれます。multiget_count関数はThriftApiに用意されているんですが、なぜか今のところ公式のドキュメントに記載がないみたいです。

var query = from x in context.ColumnList
            where x.ColumnFamily == "Product" &&
                  x.Key.In("key1", "key2") &&
                  x.Column >= 1
            select x;

Dictionary<string, int> d = query.CountColumn<string>();

さて、やっと0.7系をリリースできましたが、Cassandraemonは、0.8が出るまでしばらく沈黙が続きそうな感じです( ̄□  ̄ ||

Tags:   , , , ,
Categories:   NoSQL
Actions:   Permalink | Comments (15) | Comment RSSRSS comment feed