CouchbaseServerを触ってみよう
4章 CouchbaseをKVSとして利用してみよう
この記事は、SoftwareDesign 2016年12月号(以下、SD誌)のKVS特集中のCouchbaseServer紹介記事に関する補足記事となります。
CouchbaseServerの簡単な紹介から、実際に手を動かして利用してみるところまでを対象としています。
Couchbaseサーバに関する公式のドキュメントは大量にあるのですが、バージョンが古いものも大量に残っていたり、リンク切れなどがあるため、まずざっくり触ってみたいというときに参考にして頂きたいと思います。
この記事はCouchbase4.5を元に記載しています。
KVSとしての利用
スクリプトからの利用(PHP)
ここではサンプルとしてPHPからの利用例を紹介します。
PHPからCouchbase を利用するためには以下の準備が必要です。
http://developer.couchbase.com/documentation/server/current/sdk/php/start-using-sdk.html
# Only needed during first-time setup:
wget http://packages.couchbase.com/releases/couchbase-release/couchbase-release-1.0-2-x86_64.rpm
sudo rpm -iv couchbase-release-1.0-2-x86_64.rpm
# Will install or upgrade existing packages
sudo yum install libcouchbase-devel gcc gcc-c++ php-devel
sudo pecl install couchbase
私の環境では以下のエラーが出たこととphp5.6をインストールしていたため、少し変更しています。
fatal error: zlib.h: No such file or directory
sudo yum install libcouchbase-devel gcc gcc-c++ php56-devel zlib-devel
その後、php.iniにcouchbse.soを組み込み、Apacheを再起動します。
sudo echo "extension=couchbase.so" > /etc/php.d/couchbase.ini
sudo /etc/init.d/httpd restart
以下、先ほど作成したバケットにドキュメントを格納するサンプルです
このサンプルでは、CouchbaseBucket::upsert()命令を利用して、元のドキュメントが無かった場合には新規追加、合った場合には上書きを実行しています。
PHP上のarray()データ構造をそのままJSONとしてシリアライズして格納しているため、Couchbase上ではJSONであることを意識しないものとなっています。
vi cb_test.php
<?php
define("BUCKET_NAME", "sample");
define("BUCKET_PASSWD", "password");
// Connect to Couchbase
$cluster = new CouchbaseCluster("localhost");
$bucket = $cluster->openBucket(BUCKET_NAME, BUCKET_PASSWD);
// Store a document
echo "Upsert U:Taru8\n";
$result = $bucket->upsert(
'U:Taru8',
[
"doctype" => "USER",
"email" => "taruhachi@***.**",
"sex" => "male",
"birthday" => "1975-08-08",
"u_timestamp" => time()
],
['expiry'=>30]
);
print_r($result);
echo "Get U:Taru8\n";
$result = $bucket->get("U:Taru8");
print_r((array)$result->value);
?>
スクリプト実行結果
$ php cb_test.php
Upsert U:Taru8
CouchbaseMetaDoc Object
(
[error] =>
[value] =>
[flags] =>
[cas] => 2445gkpq8k
[token] =>
)
Get U:Taru8
Array
(
[doctype] => USER
[email] => taruhachi@***.**
[sex] => male
[birthday] => 1975-08-08
[u_timestamp] => 1474152241
)
※ドキュメントのキーおよびドキュメント双方にドキュメントのデータ区分がわかるようにしておくと管理コンソールの利用時、N1QL利用時などに便利です。
ここではドキュメントのキーのプレフィックスを"U:"とし、doctype="USER"をドキュメントに含めています。
管理コンソールでもDocumentに追加されていることが確認されました。
また、expiryとして30秒を指定しているため、30秒後には自動で削除されることも確認できます。
CouchbaseBucketに対する主要なMethodは以下の通りです。
上記サンプルスクリプトを改修しながら色々な挙動を試していただきたいと思います。
詳しくは
http://docs.couchbase.com/sdk-api/couchbase-php-client-2.2.2/
を参照下さい。