cassandraとnode.jsでアプリケーションを作ってみる
どうも、天然パーマのtyorikanです。
CassandraとNode.jsに興味があって、Clientあるかな?と思ったら予想通りありました。
これを使ってアプリケーションを作っていきたいなと思っています。
まずはセットアップ。開発環境は、mac-10.6.8
バージョンは以下をインストール。事前にnode.js(0.6.10)をインストール済。
$ npm install cassandra-client
Downloadしたapache-cassandraを設置
$ mv ~/Downloads/apache-cassandra-1.0.7 /usr/local/src/
$ sudo ln -s /usr/local/src/apache-cassandra-1.0.7 /var/lib/cassandra
cassandra起動
$ cd /var/lib/cassandra/bin
$ ./cassandra -f
以下のプログラムを実行
$ vim select.js
var http = require('http'); var Connection = require('cassandra-client/node-cassandra-client').Connection; var server = http.createServer( function (request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); var con = new Connection({host:'localhost', port:9160,keyspace:'KeySpace1'}); con.connect(function(err) { if (err) { response.write("err1:"+err); response.end(); } else { con.execute('SELECT * FROM users ', [ ], function (err, rows) { if (err) { response.write("err2:"+err); } else { /** * record1 */ // column_name response.write(rows[0].cols[0].name + ":"); // column_value response.write(rows[0].cols[0].value + ", "); // column_name response.write(rows[0].cols[1].name + ":"); // column_value response.write(rows[0].cols[1].value + "."); response.write(" "); /** * record2 */ // column_name response.write(rows[1].cols[0].name + ":"); // column_value response.write(rows[1].cols[0].value + ", "); // column_name response.write(rows[1].cols[1].name + ":"); // column_value response.write(rows[1].cols[1].value + "."); } response.end(); }); } }); } ).listen(8124);
$ node select.js The "sys" module is now called "util". It should have a similar interface.
ブラウザからアクセス
err1:NotFoundException: ColumnFamily or Keyspace does not exist
Keyspace作ってないから、ねーよ!って言われる。入れたらデータ取得されるはず。
登録してみよう
まずはKeyspaceを作成
$ /var/lib/cassandra/bin/cassandra-cli -host localhost
[default@unknown] create keyspace KeySpace1; [default@unknown] use KeySpace1;
ColumnFamilyの作成
CREATE COLUMN FAMILY users WITH comparator = UTF8Type AND key_validation_class = UTF8Type AND column_metadata = [ {column_name: name, validation_class: UTF8Type} {column_name: value, validation_class: UTF8Type} ];
データ登録
[default@KeySpace1] set users['tyorikan']['name'] = 'tyorikanName'; Value inserted. Elapsed time: 12 msec(s). [default@KeySpace1] set users['tyorikan']['value'] = 'tenpa'; Value inserted. Elapsed time: 1 msec(s). [default@KeySpace1] set users['tyorikan2']['name'] = 'tyorikanName2'; Value inserted. Elapsed time: 1 msec(s). [default@KeySpace1] set users['tyorikan2']['value'] = 'tenpa2'; Value inserted. Elapsed time: 1 msec(s).
もう1度取得してみる
$ node select.js The "sys" module is now called "util". It should have a similar interface.
ブラウザからアクセス
name:tyorikanName, value:tenpa. name:tyorikanName2, value:tenpa2.
いいね。CassandraのRead/Write速度は、0.xの頃から比べて抜群によくなったらしい。
性能比較して、良さげなら実務で使えていけたらいいな。