« 2006年09月08日 | top | 2006年09月22日 »

2006年09月14日

Bigtable

mixiの友人経由でGoogleがBigtableなるツールを作って使っていることを知った。
steps to phantasienより。

Googleの論文を見てみると以下のようなサンプルコードが書かれている。

Table *T = OpenOrDie( "/bigtable/web/webtable" );
RowMutation r1( T, "com.cnn.www" ) ;
r1.Set( "anchor:www.c-span.org", "CNN" );
r1.Delete( "anchor:www.abc.com" );
Operation op;
Apply( &op, &r1 );

Scanner scanner(T);
ScanStream *stream;
stream = scanner.FetchColumnFamily( "anchor" );
stream->SetReturnAllVersions();
scanner.Lookup( "com.cnn.www" );
for (; !stream->Done() ; stream->Next() ){
 printf( "%s %s %lld %s\n",
 scanner.RowName(),
 stream->ColumnName(),
 stream->MicroTimestamp(),
 stream->value() );
}

これはC++風だがこれをRuby風にしたらこうなるだろう。

bt = Bigtable.new( "/home/ringo/bigtablefile" )
bt.transact( "com.cnn.www" ) { |row|
 row.set( "anchor:www.c-span.org" => "CNN" )
 row.delete( "anchor:www.abc.com" )
}

scanner = bt.newScanner( "com.cnn.www" )
scanner.version = ALLVERSIONS
scanner.family = "anchor"
scanner.each { |ent|
 print scanner.family, " ", ent.columnname, " ", ent.timestamp, " ", ent.value, "\n"
}


steps to phantasien(素敵な名前・・)の人は、
オープンソースのBigtableがあればと夢想していたが、
数百台以上のグリッドでちゃんと使えるオープンソースのBigtableが
登場することはないだろう。

でも、分散システム向けに最適化されていなくても、
単純にBigtableと同じデータモデルが利用できてある程度速度を保てる
ライブラリがあれば、いろんな場面で役立つかもしれない。
もちろん、Bigtableは分散処理のために柔軟性を犠牲にしているところがあるので、
意味なく制約を受けることになるかもしれないが。

次回のLive Codingでは、
簡易的なBigtableのRuby版を作るというのをやってみるのも面白いかもしれない。

最近は、仕事ではまったくコーディングせず、
イベントでだけコーディングをするという、
イベントコーダー状態になりつつある。
まあちょうどいいのかもしれない。(ちょっと気に入っている)

Posted by ringo : 02:55 | TrackBack