Cassandra

MyCassandraというモジュラー式のNoSQLを作ってます。

今まではCassandra-0.6.2をベースに開発を行っていましたが、 せっかく公開するならば、新しいバージョンでやるべきと考え、現在MyCassasndra-0.7にアップグレードを行っているところです。近いうちに公開できるよう頑張ります!今日はMyCassandraに関するド…

TTからCassandraへのインポート

Cassandra-0.6にもsstable2json, json2sstableというimport/exportするコマンドがあるが、 これは内部用のものなので、他のDBからのインポート用にはそのまま使えない。しかも実際使ってみたけど1G程度のJSONインポートでヒープが足らんと言われてしまった。…

MyCassandraにRedisを追加

MyCassandraでRedisを使えるようにしました。前述の通りJDBCを使うJDBC-Redisは実装がいまいちでしたので、独自api実装のJRedisを利用するようにしました。これでMyCassadraは物理ストレージとしてSSTable,MySQL,Redisを使うことが出来ます。(Dynamo的な部分…

MyCassandra測定

Yahoo PNUTSの論文を読んでみて、 別にNoSQL使わなくてもMySQLでも性能は出るんじゃないかと思い、 CassandraのSSTableをMySQLに入れ替えたMyCassandraを実装しました。シーケンシャルな書き込みを重視するCassandraですが、MyCassandraではMySQL同様に書き…

Cassandraのロック機能

ReentrantReadWriteLockクラスを使ったロック 読み込みロックは複数のスレッドが取得できる 書き込みロックは1つのスレッドのみが取得できる 読み込みロックの取得中は、他のスレッドは書き込みロックを取得できない 書き込みロックの取得中は、他のスレッド…

CassandraのIO

org.apache.cassandra.ioに実際のSSTableのファイルを読み書きするパッケージが定義されている。 org.apache.cassandra.io.SSTableWriter 以下で使用される memtableからsstableへの書き出し sstableのCompaction dataFileはBufferedRandomAccessFileオブジ…

Cassandraのbootstrap

org.apache.cassandra.service.StrorageService initSearver Cassandraサーバーの初期化 bootstrapの最初に担当範囲分のloadを得るためにgossip serviceをstartする。 ここからは、configファイルのautobootstrap項目がtrue/flaseで挙動が変わる trueの場合…

Cassandraの論文

Cassandraの論文なんて無いのかと思ってたけど、 よく調べたらありました(^^;)2009年のLADISでFacebookの人が発表したもののようです。タイトル: Cassandra - A Decentralized Structured Storage System 著者: Avinash Lakshman, Prashant Malik(Facebook)…

Cassandraの書き込み

Commit Log=>MemTable RowMutationの送信 org.apache.cassandra.avro.CassandraServer commit logに書かれた内容をRowMutationとして適当なレプリカノードに送信する StrageProxyからmutate関数を呼ぶ. org.apache.cassandra.service.StorageProxy mutate関…

Cassandraの読み込み

読み込み側 org.apache.cassandra.cli.CliClient executeGet関数内でクライアントからクエリを構文解析して get関数を使ってCassandraServerにリクエスト org.apache.cassandra.avro.CassandraServer get関数=>multigetInternal=>multigetColumns=>readColum…