Search:

Search all manuals
Search this manual
Manual
Couchbaseクライアントライブラリ: Java 1.0
Additional Resources
Community Wiki
Community Forums
Couchbase SDKs
Parent Section
1 入門編
Chapter Sections
Chapters

1.4. より実用的なプログラム

より実用的で実行可能なプログラムを記述したい場合、サンプルコードをダウンロードしてください。プログラムは指定されたスレッド数のユーザを作成します。そしてそれぞれが100個のランダムな数字をCouchbase上に作成しようとします(あるいはCouchbaseから読み込もうとします)。このコードはCouchbaseClientのインスタンスオブジェクト各スレッド毎に生成します。そして特定のキーに対してgets()操作を実行します。キーが設定されていない場合は、gets()操作はnullを返します。このケースではスレッド自身が値を作成してCouchbaseにセットします。これを実行するには100ミリ秒のペナルティが発生するようになっています。これは、高価なデータベース操作をシミュレートしています。この小さなアプリケーションの完全なソースコードはこの記事の最後に添付されています。

このプログラムの一部を見て、Couchbase Serverに接続する基本的な方法が理解してみましょう。既存のキーバリューペアを評価し、特定のキーに対する値を設定します。これらのオペレーションはきっかけとなるアイデアを与えてくれるでしょう。

リスト 2 Couchbaseクラスタへの接続:

 
    URI server = new URI(addresses);

    ArrayList<URI> serverList = new ArrayList<URI>();

    serverList.add(server);
    CouchbaseClient client = new CouchbaseClient(
        serverList, "default", "");

これらの行から、CouchbaseClientのインスタンスを取得する必要があることが分かります。インスタンスを構築する方法は多数ありますが、URIのArrayListを利用したコンストラクタを利用するのが非常に便利です。

http://host-or-ip:port/pools

接続先のポートは8091になります。これはクラスタ内の他の全てのサーバを知っているプロキシで、迅速なプロトコルへのアクセスを提供します。したがって、このクラスタの場合、次のようにアドレスを文字列で与えても、上手く動きます:

String addresses = "10.0.0.33:8091/pools"

リスト3はCouchbase内のオブジェクトを必要に応じて整数に戻す際に便利な、IntegerTranscoderの作成部分を抜粋したものです。これは利便性のためであり、キャストする必要がなくなります。その後、gets()メソッドが呼び出されていることがわかります。これは値のチェックとセットに便利な整数型のCASValue<T>を返します。valueがnullの場合、Couchbaseはこのキーに対する値を保持していないことを意味します。その場合、値を設定します。もしくは、取得した値に対して何かを実行することができます。

リスト 3 チェックアンドセット(CAS)操作:

 
    IntegerTranscoder intTranscoder = new IntegerTranscoder();

    CASValue<Integer> value = client.gets(key,
        intTranscoder);

    if (value == null) {
        // Couchbase内に存在しない値
        client.set(key, 15, rand.nextInt(), intTranscoder);

        // 生成にかかる時間をシミュレート
        Thread.sleep(100);

        created++;

    } else {

        int v = value.getValue();

    }

Couchbaseの値設定は、非同期に行われ、アプリケーションはこれらが完了するまで待つ必要はありません。しかし時には、Couchbaseが確実にある値を設定したことを確認したいことあります。その場合、client.waitForQueues()を利用してください。その際には、リスト4に示すように処理待ちのタイムアウトを指定します。

リスト4 Couchbaseに値がセットされるのを待ちます:

client.waitForQueues(1, TimeUnit.MINUTES);