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

CassandraのLINQProvider作ったよ( ̄∇  ̄ )

Friday, 23 April 2010 21:03 by sabro

今をときめくCassandraの、LINQプロバイダを作ってみました( ̄∇  ̄ )

Cassandraemon in CodePlex
Cassandraemon

こんな感じで、データを取ってこれます。

public class Product
{
	public int ID { get; set; }
	public string Name { get; set; }
}

	
using(var context = new CassandraContext("localhost", 9160, "KeySpace1"))
{
	var products = from x in context.ColumnList
		       where x.Key == "1" &&
			     x.ColumnFamily == "Product"
		       select x.ToObject<product>();
				   
	foreach(var p in products)
	{
		Console.WriteLine(p.ID.ToString());
	}
}

一応、更新系もサポートしています。より詳しい解説はドキュメントページを見てください。

まだとりあえずクエリ、更新処理が動いたことを確認できただけの段階です。全く使い込んでないのでバグもあるかも。ある程度使ってみて安定してきたら、ちゃんと正式版用意すると思います。

今後の開発方針ですが、さぶろーはセカンドライフ系サービスの開発が忙しいため、Cassandraemonに関しては、積極的なコミットはしない予定です。本家のバージョンアップで追加されたAPIくらいには対応したいですけどね。

ソースコード管理はMercurialなので、機能追加されねーって場合は、自分でForkして作ってみるのも一興かもしれません。

ちなみに、プロジェクト名の由来は、セカンドライフで絶賛稼働中の、拙作、萌え系アバターサービス「クリエモン」からです。

クリエモン

今までクリエモンのバックグラウンドではMySQLを使っていたのですが、メンテナンスが大変なのと、NoSQL使ってみたかったという理由から、Cassandraに切り替えることにしました。クリエモンで使うCassandraドライバなので、Cassandraemonというわけです。某国民的アニメとは全く関係ないのでご注意ください( ̄∇  ̄ )

Tags:   , , , ,
Categories:   .NET | NoSQL
Actions:   Permalink | Comments (63) | Comment RSSRSS comment feed

オブジェクトデータベースdb4oをちょっと調べてみた

Monday, 15 March 2010 14:44 by sabro

クリエモンでは、.NETの、DataReader系を使用した独自の永続化層を作って、MySQLへアクセスしてたんですが、ちょっと他のプロジェクトで使い回せるようなカタチになってなかったり、NoSQL系に興味が出てきたりしたので、別のやり方を模索しています。

FaceBook、Twitterなどの大手が採用しているCassandraと、Monoでも問題なく使えるオブジェクトデータベースdb4oが気になっていたので、今回はdb4o(ver7.4)を軽く調べてみました。

特徴

  • オブジェクト自体を検索条件として使える
  • より詳細なクエリも発行出来る構文もある
  • Linqでデータを取ってくることも可能
  • インデックスも使える
  • トランザクションもある
  • サーバ側も基本的には自分でコードを書く必要あり
  • レプリケーション可能、2台まで?
  • レプリケーションは、双方向も可能
  • クラスターは実装中ぽい
  • MySQL的なデュアルライセンス

オブジェクトデータベースということで、カラムとフィールドのマッピングが不要だったり、クエリもSQL不要だったりで、コードの記述量はかなり少なくて済む印象。Javaと.NETのみをターゲットにしていて、LINQにも対応するなど、かなり.NETと親和性は高めに感じました。

ただ、組み込み用途を主に意識しているようで、Webでの使用は若干の不安もありそう。レプリケーションは可能で、コードから設定するんだけど、2台までしか指定できなくなってます。ただ、2台のレプリケーションの設定をいくつも書けば、もっとたくさんでのレプリケーションも可能なのかも(未調査)。双方向のレプリケーションが可能なのはいい感じ。要するにマルチマスタで、コンフリクト時は、自分でイベントハンドラを書いて解消する仕組みになってます。クラスターっていうのもあるみたいだけど、まだ実験段階かな。

速度面は、PolePosition benchmarkっていうのを見たら、かなりパフォーマンスがいいってことだったけど、実際、Wikipediaの日本語記事データを70万件くらいインサートしてみたら、MySQLの方が速かったです。オブジェクトのネストが浅かったからですかね。 1項目インサートするごとに、ネットワークを繋ぎ直していたのが遅くなっていた原因でした。一度使ったコネクションを使い舞わすようにしたところ、驚くほどInsertがパフォーマンスアップしました。体感ですが、MySQLの数倍速いと思います。

総合的にみて、db4oはコードが簡潔に書けて非常に使いやすいですが、Webで大規模に使うには、まだちょっと不安が残るかなという感じをうけました。組み込み系を作るときは、ぜひ使ってみたいプロダクトですね。クリエモンで使うかどうかは、Cassandraの方も評価してみて、最終的な判断をしようと思います( ̄∇  ̄ )

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