SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

実用段階に入ったNoSQLをおさらい
「Cassandra」の概要と導入手順・基本設定

  • X ポスト
  • このエントリーをはてなブックマークに追加

Cassandra起動

 以下のコマンドで、Cassandraを起動します。起動時にエラーが発生すれば停止した状態になります。プロセスに残っていれば起動が成功です。パラメータの-pは、プロセスとして起動する指定です。

[root@localhost bin]#cd /usr/local/cassandra/dsc-cassandra-1.2.11/bin
[root@localhost bin]#./cassandra -p

 起動したプロセスを確認します。プロセスID26349で稼働中です。

[root@localhost bin]# ps auwx|grep cassandra
root     26349  7.4  6.4 2066344 251752 pts/0  Sl   16:53   0:05 /usr/java/jre1.7.0_45/bin/java -ea -javaagent:./../lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms1G -Xmx1G -Xmn500M -XX:+HeapDumpOnOutOfMemoryError -Xss288k -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseTLAB -XX:+UseCondCardMark -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.port=7199 
:
:

 nodetoolコマンドで、ノードの状態を確認できます。StatusがUpになっていれば、ノード正常に稼働しています。

[root@localhost bin]# ./nodetool -h localhost ring
Note: Ownership information does not include topology; for complete information, specify a keyspace

Datacenter: datacenter1
==========
Address    Rack        Status State   Load            Owns                Token

127.0.0.1  rack1       Up     Normal  38.05 KB        100.00%             6450387316871144019

 Cassandraの停止は、乱暴ですが該当プロセスをkillします。

[root@localhost bin]# kill 26349

 ここまでで、シングルノードの起動が完了しました。

データ操作(CQL)

 起動してCassandraでCQLを使用して操作します。作成するテーブルは、次のような構成です。

表8:作成するTableの構造
KEYSPACE ks1
TABLE namelist1
COLUMN name text
addr text
key1 text
PRIMARY KEY key1

 インストールしたCassandraを起動した状態にします。まずはCQLのコマンドラインを起動して、試しにhelpを表示します。

[root@localhost bin]# ./cqlsh 
Connected to Test Cluster at localhost:9160.
[cqlsh 3.1.7 | Cassandra 1.2.11 | CQL spec 3.0.0 | Thrift protocol 19.36.1]
Use HELP for help.
cqlsh> help

Documented shell commands:
===========================
ASSUME   CONSISTENCY  DESC      EXIT    HELP  SOURCE 
CAPTURE  COPY         DESCRIBE  EXPAND  SHOW  TRACING

CQL help topics:
================
ALTER                        CREATE_TABLE_OPTIONS  SELECT             
ALTER_ADD                    CREATE_TABLE_TYPES    SELECT_COLUMNFAMILY
ALTER_ALTER                  CREATE_USER           SELECT_EXPR        
ALTER_DROP                   DELETE                SELECT_LIMIT       
ALTER_RENAME                 DELETE_COLUMNS        SELECT_TABLE       
ALTER_USER                   DELETE_USING          SELECT_WHERE       
ALTER_WITH                   DELETE_WHERE          TEXT_OUTPUT        
APPLY                        DROP                  TIMESTAMP_INPUT    
ASCII_OUTPUT                 DROP_COLUMNFAMILY     TIMESTAMP_OUTPUT   
BEGIN                        DROP_INDEX            TRUNCATE           
BLOB_INPUT                   DROP_KEYSPACE         TYPES              
BOOLEAN_INPUT                DROP_TABLE            UPDATE             
COMPOUND_PRIMARY_KEYS        DROP_USER             UPDATE_COUNTERS    
CREATE                       GRANT                 UPDATE_SET         
CREATE_COLUMNFAMILY          INSERT                UPDATE_USING       
CREATE_COLUMNFAMILY_OPTIONS  LIST                  UPDATE_WHERE       
CREATE_COLUMNFAMILY_TYPES    LIST_PERMISSIONS      USE                
CREATE_INDEX                 LIST_USERS            UUID_INPUT         
CREATE_KEYSPACE              PERMISSIONS         
CREATE_TABLE                 REVOKE              

 それでは、CQLを使用してTableの作成とデータの入出力をしてみます。KEYSPACEを作成して、存在を確認します。

cqlsh> CREATE KEYSPACE ks1 WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 1};
cqlsh> select * from system.schema_keyspaces;

 keyspace_name | durable_writes | strategy_class                              | strategy_options
---------------+----------------+---------------------------------------------+----------------------------
           ks1 |           True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"1"}
        system |           True |  org.apache.cassandra.locator.LocalStrategy |                         {}
 system_traces |           True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}

 Tableを作成して、データを入力します。CQLはSQLとほぼ同じ構文です。2バイト文字も使用できます。

cqlsh> use ks1;
cqlsh:ks1> CREATE TABLE namelist1 (name text, addr text, key1 text,PRIMARY KEY (key1)); 

 INSERT INTOステートメントでデータを入力します。

cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('Satou','Tokyo','000');
cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('Tanaka','Osaka','001');
cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('Watanabe','Nagoya','002');
cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('佐藤','札幌','010');
cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('たかはし','さいたま','011');
cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('ヨシダ','ハカタ','012');

 SELECTストーメントで、Tableの内容を確認します。

cqlsh:ks1> SELECT * FROM namelist1;

 key1 | addr     | name
------+----------+----------
  000 |    Tokyo |    Satou
  011 | さいたま | たかはし
  012 |   ハカタ |   ヨシダ
  010 |     札幌 |     佐藤
  002 |   Nagoya | Watanabe
  001 |    Osaka |   Tanaka

 SELECTストーメントでWHERE句を使用して検索を行います。

cqlsh:ks1> SELECT * FROM namelist1 WHERE key1='001';

 key1 | addr  | name
------+-------+--------
  001 | Osaka | Tanaka

 UPDATEステートメントでデータを更新します。

cqlsh:ks1> UPDATE namelist1 SET addr = '埼玉' WHERE key1='011';
cqlsh:ks1> SELECT * FROM namelist1;

 key1 | addr   | name
------+--------+----------
  000 |  Tokyo |    Satou
  011 |   埼玉 | たかはし
  012 | ハカタ |   ヨシダ
  010 |   札幌 |     佐藤
  002 | Nagoya | Watanabe
  001 |  Osaka |   Tanaka

 DELETEステートメントでデータを削除します。

cqlsh:ks1> DELETE FROM namelist1 WHERE key1='012';
cqlsh:ks1> SELECT * FROM namelist1;

 key1 | addr   | name
------+--------+----------
  000 |  Tokyo |    Satou
  011 |   埼玉 | たかはし
  010 |   札幌 |     佐藤
  002 | Nagoya | Watanabe
  001 |  Osaka |   Tanaka

 CQLの特徴としてINDEXに指定していないColumnは、WHERE句に指定できません。指定するとエラーです。

cqlsh:ks1> SELECT * FROM namelist1 WHERE name='Satou';
Bad Request: No indexed columns present in by-columns clause with Equal operatorcqlsh:ks1> SELECT * FROM namelist1 WHERE key1='001' OR key1='000';
Bad Request: line 1:41 missing EOF at 'OR'

 TABLE内のデータを全消去するには、TRUNCATEステートメントを使用します。

cqlsh:ks1> TRUNCATE namelist1;
cqlsh:ks1> SELECT * FROM namelist1;

 TABLEの削除は、DROP TABLEステートメントを使用します。TABLEが存在しないので、SELECTステートメントは、エラーです。

cqlsh:ks1> DROP TABLE namelist1;
cqlsh:ks1> SELECT * FROM namelist1;
Bad Request: unconfigured columnfamily namelist1

次のページ
むすび

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

佐藤 栄一(コネクト株式会社)(サトウ エイイチ(コネクトカブシキガイシャ))

PHPによるWebシステム構築をプロダクトとサポートサービスで支援するコネクト株式会社(創業時はゼンド・ジャパン株式会社)の創立メンバー。主要事業の一つであるMySQLの技術担当(Oracle Certified Expert,MySQL 5.1 Cluster Database Administrator)。ビックデータで注目を集めるCassandraも合わせて担当する。http://www.konekto.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7548 2014/01/08 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング