cassandraのインストールから実行まで

■cassandraとは

NoSQLミドルウェアの代表格。
非リレーショナルデータベース。
分散データベース。
Hadoopに比べるとCassandraはリアルタイム処理を得意とし、
一貫性のかわりに可用性を重視している。
Facebookが開発したことで有名。

■通常のSQLとの違い

・クエリ言語がない
クエリ言語ではなく、Thriftを通してアクセスするAPIがあるのみ
※0.8以降でCQLというクエリ言語が登場。

・参照整合性がない
cassandraの場合は参照整合性の概念がなく、joinの考え方がない。

・OrderByやGroupByがない。
SliceRangeクエリがあり、反転できる点でこれがorderbyと似ている。

・Whereがないのにどうやって検索する!?
select * from Hotel where name = 'royalpark';
を実現する為に
Hotelカラムファミリとは別にHotelByNameカラムファミリをインデックス構築する

・1つ以上の複数ノードで動くことを前提に作られている(データのレプリケーションは自動的に行われる)

■設計上の注意

・クエリから取り掛かる

■cassandraではドライバは用意されていない

例えばPythonを使用する場合、Python用のCassandraドライバを使用する
というようなことはしない。っていうかない。
ThriftAPIによって提供されるクライアントの生成レイヤを使用する

■クライアントソフト

CassandraWebConsoleを使用

JDKのインストール

#yum install fastest-mirror
#yum search jdk
#yum install java-1.6.0-openjdk*
#which java
#/usr/bin/java

■Cassandraのインストール

wget http://fossies.org/unix/misc/apache-cassandra-1.0.7-bin.tar.gz
tar xzvf apache-cassandra-1.0.7-bin.tar.gz
mv apache-cassandra-1.0.7 /usr/local/
ln -s /usr/local/apache-cassandra-1.0.7/ /usr/local/cassandra
cd /usr/local/cassandra
//cp conf/log4j.properties.sample conf/log4j.properties
//cp conf/storage-conf.xml.sample conf/storage-conf.xml
実行
/usr/local/cassandra/bin/cassandra

■phpcassa

# wget https://github.com/downloads/thobbs/phpcassa/phpcassa-0.8.a.2.tar.gz
# tar -zxvf phpcassa-0.8.a.2.tar.gz
# cp -R phpcassa-0.8.a.2 /usr/local/phpcassa
# cd /usr/local/phpcassa/thrift/ext/thrift_protocol
# phpize
# ./configure
# make && make install

(参考)
http://d.hatena.ne.jp/yuki_2021/touch/searchdiary?word=*%5BPHP%5D

/usr/local/phpcassa/thrift/ext/thrift_protocol/php_thrift_protocol.cpp:404: error: 'zend_std_get_constructor' was not declared in this scope
make: *** [php_thrift_protocol.lo] Error 1
と怒られた場合-->PHP5.2以下であれば5.2以上にあげること。
https://wiki.fourkitchens.com/display/PF/Using+Cassandra+with+PHP

■設定ファイルの確認

vim /usr/local/cassandra/conf/cassandra.yaml

■バージョン確認

[root]# /usr/local/cassandra/bin/cassandra-cli --host localhost --port 9160
show api version
show cluster name

■Cassandra-CLIの立ち上げ

#起動する
/usr/local/cassandra/bin/cassandra-cli --host localhost --port 9160
Connected to: "Test Cluster" on localhost/9160
Welcome to Cassandra CLI version 1.0.7

[default@unknown] connect localhost/9160;
[default@unknown] show cluster name;
[default@unknown] set Keyspace1.Standard2['unoh']['age']='25'
[default@unknown] get Keyspace1.Standard2['unoh']
[default@unknown] set Keyspace1.Standard2['unoh']['age']='25'
#起動ノードの確認
[root]# jps
6202 Jps
26603 CassandraDaemon

■Cassandraの操作メモ

#キースペースの確認
[default@unknown] show keyspaces;
Keyspace: system:
#キースペースの作成 (create databaseみたいな感じ)
[default@unknown]create keyspace MyKeyspace;
#キースペースの削除 (drop databaseみたいな感じ)
[default@unknown]drop keyspace MyKeyspace;
#キースペースの選択
use MyKeyspace;
#カラムファミリの作成 (create tableみたいな感じ)
[default@MyKeyspace] create column family User with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type;
#カラムファミリの確認 (show tables みたいな感じ)
[default@MyKeyspace] describe MyKeyspace;
#カラムファミリの削除
[default@MyKeyspace] drop column family User;
#カラムファミリ内のデータを列挙(select * from)
[default@unknown] list User;
#カラムファミリ内のデータを空にする(truncate table from)
[default@unknown] truncate User;
#カラムファミリ内にデータを追加する(insert)
[default@MyKeyspace]set User['ehewitt']['fname']='Eben';

[default@MyKeyspace]set User['ehewitt']['email']='me@example.com';
#カラムファミリ内のデータを検索、カウントする(select)
[default@MyKeyspace]cout User['ehewitt'];

[default@MyKeyspace]get User['ehewitt'];

[default@MyKeyspace]get User['ehewitt']['email'];
#スーパーカラムファミリの作成
[default@MyKeyspace]create aPointOfUser with column_type = Super and comparator = UTF8Type and subcomparator = UTF8Type;

※setする場合に
cannot parse 'fname' as hex bytes
と怒られる場合はset時にascii()で文字を入れるか、
create column familyでUTF8Typeを指定すること!

■その他
・IBMLotus
CouchDB,MongoDBなどドキュメント指向データベースの元。

・ApacheCouchDB
LotusNotesに似たデータベース。
MVCCとよばれる機能が特徴的。読込が書き込みをブロックせず、書き込みも読込をブロックしない。
ドキュメントを保存する場合すべての書き込みは追記で行われ、データの破損を起こりにくくしている。

・MongoDB
キーバリューストア、オブジェクトデータベース、RDBMSの良い点を組み合わせることを意図。

Google Bigtable
Google内部で使用されているデータベース。
ペタバイトのオーダーでスケールするように設計。
BigTableの設計上の多くはcassandraにも反映されている。

・FlockDB
TwitterGitHubオープンソース化したデータベース。

・AmazonDynamo
Amanzon専用のキーバリューストレージシステム。

■参考
http://labs.unoh.net/2010/08/cassandra.html

http://wiki.apache.org/cassandra/FAQ_JP

http://blog.ik.am/entry/view/id/48/title/Cassandra0.7.0(-rc2)%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%8B%E3%82%89CLI%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%BE%E3%81%A8%E3%82%81%E3%81%BE%E3%81%A7/

thrift
http://fujitaiju.com/blog/php/thrift%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6cassandra%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA%E3%82%92%E3%81%99%E3%82%8B%E3%80%82/

phpcassa
http://d.hatena.ne.jp/yuki_2021/touch/searchdiary?word=*%5BPHP%5D