PHP
Couchbase
couchbase4.5

CouchbaseServerを触ってみよう -KVSとして利用してみよう-

More than 1 year has passed since last update.

CouchbaseServerを触ってみよう

4章 CouchbaseをKVSとして利用してみよう

この記事は、SoftwareDesign 2016年12月号(以下、SD誌)のKVS特集中のCouchbaseServer紹介記事に関する補足記事となります。
CouchbaseServerの簡単な紹介から、実際に手を動かして利用してみるところまでを対象としています。

Couchbaseサーバに関する公式のドキュメントは大量にあるのですが、バージョンが古いものも大量に残っていたり、リンク切れなどがあるため、まずざっくり触ってみたいというときに参考にして頂きたいと思います。
この記事はCouchbase4.5を元に記載しています。

Indexはこちら

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に追加されていることが確認されました。

cms_07.png

また、expiryとして30秒を指定しているため、30秒後には自動で削除されることも確認できます。

CouchbaseBucketに対する主要なMethodは以下の通りです。
上記サンプルスクリプトを改修しながら色々な挙動を試していただきたいと思います。

php_methods_01.png

詳しくは
http://docs.couchbase.com/sdk-api/couchbase-php-client-2.2.2/
を参照下さい。