2010-01-01から1年間の記事一覧

Cassandraのデータのexportツール sstable2json

sstable2jsonの概要 sstableをjson化するsstable2jsonというツールが存在します。これはデータのexportに使います。sstable2jsonは、 -Data.dbで終わるsstableのファイルへのフルパスを引数にして、そのsstableをjson化してexportすることができます。 使い…

Cassandraのデータのimportツール json2sstable

概要 JSONをimportして新しいsstableを作るのが、json2sstable。 使い方 Usage: json2sstable -K keyspace -c column_family 実装 パッケージとしては、org.apache.cassandra.tools。クラスはSSTableExportのimportJsonメソッド importJson(json, keyspace, …

Cassandraのノード管理ツール(nodetool)

nodetool概要 nodetoolは、clusterの管理ツールです。ノードが生きてるかどうか調べたり、compactionを実行できたりなどをすることができます。 利用できるコマンド どのようなコマンドが利用できるかというと、以下のようなコマンドが利用できます String h…

Cassandraのcluster wideな管理ツール(clustertool)

cluster wideな管理ツール cluster toolはcluster wideな管理ツールにしていきたいようです。ただ、まだ使えるコマンドが殆どないので、そういうツールになっていくんだろうという感じです。 使えるコマンド まだ全然ありません。これから整備していくみたい…

Cassandraのコマンドラインツール (cassandra-cli)の実装

パッケージでいうと、org.apache.cassandra.cli。CliMainがメイン。commons.cliつかったCLI実装。Args4jとかのほうがシンプルでいいなーというのはさておき、commons系で実装。実行部分は、CliClientでCliCompilerを使ってstatementをパースして実行。CliCom…

Cassandraでのデータの削除について

削除処理の概要 削除するまでに全ノードにその削除通知が行き渡るには時間がかかるので、tombstoneというdeletion markerをつけて、それを使って他のノードにも伝播させることで、他ノードでも削除マークを付ける。全てのノードで削除マークがつくまでに時間…

Cassandraのアーキテクチャまとめ

Cassandra Architectureに沿って、今までのエントリをまとめておきます。今後、ここにリンクを追記していく予定です。 Cassandra Architecture Cassandra API Cassandraのインターフェース http://dann.g.hatena.ne.jp/dann/20100309/p3 CassandraのConsiste…

CassandraでのCluster membersipとFailure detection

Cassandraでは、ノードのメンバシップをgossip-basedなprotocalでEventually consistentに管理しています。また、ノードの状態についても、gossip-basedなprotocolをベースに管理しています。この、Gossipアルゴリズムというのは何かというと、噂の伝播をモ…

Cassandraを理解するのに必要なアルゴリズム、データ構造、アーキテクチャ

分散システム、特にCassandraで必要に鳴るアルゴリズム、データ構造、アーキテクチャについてまとめておきます。 アルゴリズム Vector Clocks http://funini.com/kei/logos/clock.shtml Gossip protocol データ構造 Bloom filter http://ja.wikipedia.org/wi…

Cassandraでのデータの書き込み

Cassandra code reading 3日目です。今日はデータの書き込み編です。ざーっと概要レベルで処理をおさえて、個々の細かいデータ構造は、追々追記していきます。主要な登場人物は、 commit log memtable sstable です。commit log -> memtable -> sstable とい…

Cassandraの書き込み部分の実装箇所

Memtable パッケージは、org.apache.cassandra.db IFlushable <-- Memtable <-- BinaryMemtablewriteSortedContentsがflushAndSignalメソッドから呼ばれている。flushされるタイミングは、先のエントリで書いたタイミング。flushAndSignalメソッドのcall hie…

CassandraのConsistency

Concistency Levelはデータのread, writeのAPIそれぞれで指定するようになっていて、Levelによってread, writeの挙動が異なってくる。定義されているConsistency Levelは、以下の6つ。定義箇所は、以下の場所に。 https://svn.apache.org/repos/asf/incubato…

CassandraのReplication strategy

パッケージとしては、org.apache.cassandra.locator。 実装としては、AbstractReplicationStrategy。これをベースに、以下の3つの方法がある。 RackAwareStrategy キーに対応するノード群を返すRack awareなStrategyクラス。異なるデータセンターのノードま…

Cassandraでのソートについて

少しずつ読み進めてます。今日はsortです。 Columのソート パッケージでいうと、org.apache.cassandra.db.marshalColumnのSort orderはColumnFamilyレベルで定義される。すべての型は、AbstractTypeを継承している。AsciiTypeのみBytesTypeを継承。ソートタ…

CassandraのPartitioning

パッケージでいうと、org.apache.cassandra.dht。インターフェースでいうと、IPartitioner。全てのCassandraのノードにTokenが割つけられていて、これらのTokenは、どのキーが、primary replicaに属するのかを決めるために使われている模様。IPartitonerは、…

Cassandraのインターフェース

https://svn.apache.org/repos/asf/incubator/cassandra/trunk/interface/cassandra.thriftこれ見るのが一番。serviceのとこみればインターフェースが、structのところを見ればデータモデルがわかります。thriftで実際にインターフェースからクライアントを…

Cassandraのデータモデル

Cassandraのデータモデルについてまとめてみました。パッケージでいうと、org.apache.cassandra.db。 Column (normal) name, value, timestampから構成される Super Column columnのvalueとして、複数のcolumnのlistを含むcolumn Super Columnはtimestampは…

CassandraとSEDAのアーキテクチャの対応関係

Cassandraで、SEDAのアーキテクチャをどのように実装しているかを調べてみました。SEDA対応部分は、concurrent.utilのお陰でとてもシンプルな実装でわかりやすいですね。 https://svn.apache.org/repos/asf/incubator/cassandra/trunk/以下、概要です。 SEDA…

SEDA (Staged Event-Driven Architecture)

Casssandraの設計を理解する上で、SEDAのアーキテクチャを理解する必要があったので調べてみました。 http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf 既存技術の問題 Thread modelは設計・管理しやすいがサーバのスケーラビリティという観点から…

YAPC::Asia 2009後のCPAN::Packager

CPAN::Packagerを今年になってから大幅に更新し、CPAN::Packager 0.33をリリースしました。YAPC::Asia 2009で頂いたリクエストはすべて反映しました。 以下が変更点です。マニュアルも書きましたので、ご一読頂ければ。 RPM作成前にモジュールのテストを実行…

FlexのWAFであるRobotlegsが良さそうな件

PureMVCが良さそうだと先日書いたのですが、簡単なサンプルを書いてみたところ、以下の問題があることがわかりました。 Service Locatorに依存しすぎていて、MVC全体がLocatorに依存してしまう MVCSのすべてでフレーワークのベースクラスを継承することにな…

ActionScript開発に必要な基本的なライブラリとツール群のまとめ

今年は、クライアントサイドも書けるようにするために、ActionScriptのほうを初めてみることにしました。そこで、昨日は1日ActionScriptを書きながら、開発で必要になるベーシックなライブラリやツール群を調べていました。作り方含めて大分わかってきたので…

AS3のWAF

FlexのWAF 幾つか見た感じだと、PureMVCが一番シンプルで良さそう。 MVCS構成で作るとこうなるだろうなぁといった感じで作られていて、とても素直な作りで理解がしやすい ただ、画面遷移をどう作るのがセオリーなのかちょっとわからない。これはPureMVC限ら…

Flex Builderのプラグイン

Blueprint pluginとformatterは割と便利。 Blueprint plugin http://labs.adobe.com/technologies/blueprint/ Flex formatter http://sourceforge.net/projects/flexformatter/ TODO/Fixme plugin http://www.richinternet.de/blog/index.cfm?entry=911D4B57…

Plack::Middleware::Failsafe

新年1つ目のモジュールは例外を一番外側でcatchして、ログを出力後、エラー画面を表示するMiddlewareを作りました。もともとは、Railsのmiddlewareなのですが、RailsのMiddlewareは、Railsに依存してしまっていたので、依存しないように分離してあります。ht…