天然パーマのテンパらない開発

自分の開発/勉強記録みたいなもんです

cassandraとnode.jsでアプリケーションを作ってみる

どうも、天然パーマのtyorikanです。

 

CassandraとNode.jsに興味があって、Clientあるかな?と思ったら予想通りありました。

cassandra-node

これを使ってアプリケーションを作っていきたいなと思っています。

 

まずはセットアップ。開発環境は、mac-10.6.8

バージョンは以下をインストール。事前にnode.js(0.6.10)をインストール済。

 

apache-cassandra-1.0.7

cassandra-client-0.8.2

$ 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.

 

ブラウザからアクセス

http://127.0.0.1:8124/

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.

ブラウザからアクセス

http://127.0.0.1:8124/

 

name:tyorikanName, value:tenpa.   name:tyorikanName2, value:tenpa2.

 

いいね。CassandraのRead/Write速度は、0.xの頃から比べて抜群によくなったらしい。

性能比較して、良さげなら実務で使えていけたらいいな。