VoltDB 入門

ハイパフォーマンスのインメモリー・データベースを Java コードで使用する

NoSQL データベースが持つスケーラビリティーを実現するとともに、従来のリレーショナル・データベース・システムが持つ ACID 特性を備えたインメモリー・データベース、VoltDB について学んでください。この記事では、データベース・テーブルを設計してパーティショニングし、Java コードで作成されたストアード・プロシージャーを使用してデータの格納と取得を行う方法を説明します。さらに、VoltDB をベースに作成されたキー・バリュー型ストアである VoltCache についても探ります。

Simon Buckle, Independent Consultant, Freelance

Photograph of Simon BuckleSimon Buckle は独立したコンサルタントです。分散型システム、アルゴリズム、並行性に関心を持っています。インペリアル・カレッジ・ロンドンでコンピューティングの修士号を取得しました。彼の Web サイトには simonbuckle.com からアクセスできます。



2013年 11月 14日

はじめに

この 2、3 年の間に、NoSQL と呼ばれる新しい種類のデータベース管理システムが登場しました。NoSQL データ・ストアは、従来のリレーショナル・データベースでスケーリングしようとする際の困難を克服するように設計されたもので、一部のアプリケーションが対処しなければならないタイプのデータ・ロード (例えば、Amazon の場合など) に対処します。しかし、こうしたスケーラビリティーの実現には次のような代償を伴います。一般に NoSQL システムには ACID 特性 (アトミック性、一貫性、独立性、永続性) が備わっていません。NoSQL システムは、結果整合性を備えたシステムであり、大まかに言うと、データに対する更新のすべてが最終的にシステム全体に伝搬されるまでに、ある特定の期間を要するということです。これは、アプリケーションのタイプによっては望ましくありません。

オンライン・トランザクション処理 (OLTP) に従来使用されてきたリレーショナル・データベース管理システムは、整合性を保証します (つまり、ACID 特性を備えています) が、スケーリングするのが非常に難しく、コストもかかります。調査によると、これらのシステムはとりわけ効率的なわけでもありません。CPU 時間のうち、レコードを取得して更新するために費やされるのは 約 10 % で、残りの 90% はバッファー管理、ロック、ラッチ、ロギングなどの処理に費やされます。

MySQL などの従来のリレーショナル・データベースや大部分の NoSQL システムではデータをディスクに保管しますが、VoltDB ではすべてのデータをメイン・メモリーに保管します。ディスクにアクセスするのを避けることができれば、パフォーマンスを飛躍的に向上させることができます。ディスクにアクセスするよりも、メモリーにアクセスするほうが桁外れに高速だからです。最近の RAM の価格は以前に比べて大幅に下がっていること、そして 64 ビット・コンピューティングが登場したこともあり、数百ギガバイトのメイン・メモリーを標準的な市販のサーバーにも搭載できるようになっています。

VoltDB データベースは、さまざまなサイト (サーバー) に分散された、いくつものパーティションで構成されます。各サイトで稼動するパーティションはそれぞれにシングル・スレッド化されるため、典型的なマルチスレッド環境におけるロックやラッチに伴うオーバーヘッドが排除され、トランザクション・リクエストは順次実行されます。

NoSQL データベースは、その名前が示すように、問い合わせ言語として SQL を使用しません。例えば、MongoDB クエリーは JSON で表現されます。Riak と CouchDB はどちらも map/reduce 関数を使用して、クエリーの作成をサポートします。一方、VoltDB が問い合わせ言語として使用するのは SQL です。これは、データベースを扱ったことのある開発者のほとんどが SQL を使い慣れているという点で、VoltDB を導入するメリットの 1 つとなります。このことは、一部の NoSQL データベースが提供しているクエリー・インターフェースには当てはまりません。

VoltDB に保管されているデータにアクセスするには、Java 言語で作成されたストアード・プロシージャーを使用します。つまり、ストアード・プロシージャー内に SQL 文を埋め込むということです。ストアード・プロシージャー内から JDBC などのプロトコル上で SQL クエリーを実行するメリットの 1 つは、トランザクションごとに必要な、クライアントとサーバーとの間のやりとりが 1 往復だけで済むことです。そのため、アプリケーションとデータベースとの間でネットワークを跨いで行われる複数の呼び出しに伴う待ち時間がなくなります。

VoltDB には、オープンソースのコミュニティー・エディションと有償のエンタープライズ・エディションの 2 つのバージョンが用意されています。この記事で焦点を当てるのは、コミュニティー・エディションです。機能のなかにはエンタープライズ・エディションでしか使用できないものもありますが、この記事では、そのような機能については触れません。


開始手順

この記事の例を実際に試してみるには、VoltDB をダウンロードしてインストールする必要があります。この記事で使用しているバージョンは、コミュニティー・エディションのバージョン 2.5 です。

VoltDB には、64 ビット版 Linux ベースのオペレーティング・システムが必要です (Mac OSX 10.6 でも動作します)。JDK (Java Development Kit) 6 もインストールする必要があります。ソース・コードを編集するには、Eclipse を使用することができます。ダウンロード・ページへのリンク、およびシステム要件の完全なリストについては、「参考文献」を参照してください。

別の方法として、Amazon EC2 および VMware のイメージをダウンロードして使用することもできます。これらのイメージをダウンロードすれば、すぐに VoltDB を使い始められます。

VoltDB は gzip された tar アーカイブとして配布されるので、ダウンロードした後は、コマンド $ tar -zxvf voltdb-2.5.tar.gz -C ~/ を実行して解凍してください。

この例では、ホーム・ディレクトリーにインストールすることを選択しました。開発目的では、ホーム・ディレクトリーで申し分ありませんが、これとは別のディレクトリーに解凍することもできます。

解凍したら、bin ディレクトリーをパスに追加します ($ export PATH=$PATH:~/voltdb-2.5/bin)。

bin ディレクトリーには、後でサンプル・アプリケーションをデプロイするときに役立つ多数のコマンドが含まれています。

次に、この記事に付属のソース・コードをダウンロードします。ダウンロードしたら、任意のディレクトリーに解凍してください。このサンプル・アプリケーションでは、架空の会社 Acme Inc. の従業員にフォーカスします。

典型的な VoltDB アプリケーションは、以下のファイルからなります。

  • プロジェクト定義ファイル (project.xml): どのストアード・プロシージャーが使用可能か、データベース・スキーマ・ファイルの場所、パーティション情報、等々の情報を格納するファイルです。
  • デプロイメント・ファイル (deployment.xml): ホスト当たりのサイト数などの情報を格納するファイルです。
  • データベース・スキーマ (ddl.sql)。
  • ソース・コード: 例えば、ストアード・プロシージャーやクライアントなど。

上記のそれぞれについて、この記事全体にわたって詳しく説明します。

プロジェクトを Eclipse にインポートするには、Eclipse を起動して以下の手順に従います。

  1. 「File (ファイル)」 > 「New (新規)」 > 「Project (プロジェクト)」の順に選択します。
  2. 「Java Project from Existing Ant Buildfile (既存 Ant ビルド・ファイルからの Java プロジェクト)」を選択し、「Next (次へ)」をクリックします。
  3. 「Link to the build file in the file system (ファイル・システム内のビルドファイにリンク)」ボックスにチェック・マークを付けます。
  4. サンプル・アプリケーションをインストールしたディレクトリーから、Ant ビルド・ファイルとして「build.xml」を選択し、「Finish (完了)」を選択します。

独自のアプリケーションを作成したければ、VoltDB には自動的にスケルトン・プロジェクトを生成してくれるツールが用意されています。この記事に付属のアプリケーションのフォルダー構造は、このツールを使用して生成したものです。

リスト 1 に、このツールを呼び出す方法を示します。

リスト 1. スケルトン・プロジェクトを生成する
$ cd $HOME/voltdb-2.5/tools
$ ./generate app acme $HOME/Projects/app

このツールは、いくつかの引数を以下の順に取ります。

  • アプリケーションの名前
  • パッケージ名 (Java コード用)
  • プロジェクトを作成する場所

リスト 1 のコマンドを実行した後、新しく作成されたフォルダーを調べてください。ツールによってスケルトン・プロジェクトが生成されて、そこに VoltDB アプリケーションをビルドするために必要なファイルが含まれていることを確認できます。


ストアード・プロシージャー

導入部分で述べたように、データにアクセスするには、Java コードで作成されたストアード・プロシージャーを使用します。従来の RDBMS と同じように、必要なデータを該当するテーブルから取得するには SQL クエリーを作成しなければならないことに変わりはありませんが、SQL クエリーを実行するのはストアード・プロシージャー内からです。ストアード・プロシージャーのそれぞれの呼び出しがトランザクションであり、成功すればストアード・プロシージャーがコミットされ、成功しなければロールバックされます。

トランザクションは順次実行されることから、ストアード・プロシージャーを作成するときには、できるだけ短時間で実行されるようにしなければなりません。そうでないと、他のトランザクションがブロックされて、実行を待機している状態になってしまいます。従って、ストアード・プロシージャーには、例えば、e-メールを送信したり、複雑なデータ分析を行ったりするなどの処理を含めないようにしてください。

リスト 2 に、従業員テーブルにエントリーを挿入するストアード・プロシージャーの例を記載します。

リスト 2. 従業員を追加する (AddEmployee.java)
@ProcInfo (
    partitionInfo = "EMPLOYEE.EMAIL: 0",
    singlePartition = true
)
public class AddEmployee extends VoltProcedure {

    public final SQLStmt addemployee = new SQLStmt(
        "INSERT INTO EMPLOYEE VALUES (?, ?, ?, ?);"
    );

    public VoltTable[] run(String email, String firstname, 
        String lastname, int department)
    throws VoltAbortException {

        voltQueueSQL(addemployee, email, firstname, 
                     lastname, department);
        voltExecuteSQL(true);
        return null;            
    }
}

ストアード・プロシージャーは VoltProcedure クラスを継承して run メソッドを実装する必要があります。上記の例では、メソッドに引数を渡し、その引数を使用して従業員テーブルにエントリーが挿入されるようにしています。選択、更新、削除の操作も、同様のパターンに従います。

アプリケーションでは、ストアード・プロシージャーを呼び出す前に、データベースへの接続を作成しなければなりません。接続を作成するときには、データベースが実行されているホストの名前を指定します。クラスターを実行している場合は、そのクラスター内のどのノードを指定するのでも構いません。リスト 3 に、データベースへの接続を作成する方法を示します。

リスト 3. データベースに接続する
// Create a client and connect to the database
org.voltdb.client Client client;
client = ClientFactory.createClient();
client.createConnection("localhost");

データベースへの接続が確立されたら、データベースに対してクエリーを実行することができます。リスト 4 のコードには、従業員テーブルにいくつかのエントリーを追加する AddEmployee ストアード・プロシージャーを呼び出す方法を示してあります。

リスト 4. 従業員エントリーを挿入する (Client.java)
client.callProcedure("AddEmployee", "wile@acme.com",
"Wile", "Coyote", 1);
client.callProcedure("AddEmployee", "larry@acme.com",
"Larry", "Merchant", 2);

呼び出すストアード・プロシージャーの名前 (AddEmployee) は、そのストアード・プロシージャーを実装する Java クラスの名前と一致することに注意してください。

AddEmployee ストアード・プロシージャーを見るとわかるように、データベースに対してクエリーを実行するには SQL が使用されます。VoltDB がサポートしているのは SQL のサブセットのみなので、既存のアプリケーションを VoltDB にマイグレーションするとしたら、作成し直さなければならない SQL クエリーが出てくる可能性があります。「参考文献」で、VoltDB がサポートしている SQL のサブセットを説明しているページへのリンクを参照してください。

ストアード・プロシージャーに埋め込む SQL 文は前もって宣言する必要がありますが、クエリーの中ではバインド変数を使用することができます。その場合、@AdHoc システム・プロシージャーを呼び出すことで、実行時にデータベースに対してアドホック・クエリー (動的フィールドを持つ SQL クエリーなど) を実行することができます (リスト 5 を参照)。ただし、これらのクエリーを使用することはお勧めしません。最適化されていない上に、複数のパーティションにまたがるトランザクションとして実行されることから、パフォーマンスに影響を及ぼす可能性があるためです。

リスト 5. 実行時に SQL 文を実行する
String tableName = "EMPLOYEE";
VoltTable[] count = client.callProcedure("@AdHoc", 
    "SELECT COUNT(*) FROM " + tableName).getResults();
System.out.printf("Found %d employees.\n",
    count[0].fetchRow(0).getLong(0));

最後に、ストアード・プロシージャーをプロジェクト・ファイル (project.xml) 内で宣言する必要があります。この記事に付属のプロジェクト・ファイルを開くと、リスト 6 のようなエントリーがいくつもあることがわかります。

リスト 6. プロジェクト・ファイルでストアード・プロシージャーを宣言する
<procedures>
    <procedure class="acme.procedures.AddEmployee" />
    ...
</procedures>

ストアード・プロシージャーのもう 1 つの重要な部分は、@ProcInfo です。このアノテーションが、データベース内でのデータの保管方法を VoltDB に指示します。パーティショニングと呼ばれるこの保管方法については、次のセクションで説明します。


パーティショニング

パーティショニングとは、クラスター全体にテーブル・データを分散する方法を指します。つまり、テーブルの各行を複数のパーティションで別個に保管します。テーブルのパーティショニングは、開発者が指定する主キーに基づいて行われます。パーティショニングの主な目的は、できるだけ多くのクエリーが単一のサイトで実行されるようにすることです。

ストアード・プロシージャーと同じく、パーティション情報もプロジェクト定義ファイル内で宣言する必要があります。例えば、リスト 7 に記載するエントリーは、従業員テーブルのエントリーが e-メール列でパーティショニングされることを意味します。

リスト 7. e-メール列でパーティショニングされる従業員テーブルのエントリー
<partitions>
    <partition table='EMPLOYEE' column='EMAIL' />
    ...
</partitions>

ここでも従業員エントリーをデータベースに挿入するストアード・プロシージャーを例に取ると、このストアード・プロシージャーでのアノテーションはリスト 8 のようになります。

リスト 8. ストアード・プロシージャーでのアノテーション
@ProcInfo (
    partitionInfo = "EMPLOYEE.EMAIL: 0",
    singlePartition = true
)

上記のアノテーションが VoltDB に伝えていることは、従業員テーブルの e-メール列を主キーとして使用すること、そしてそれが run メソッドに渡される最初の引数であることです。引数を参照するときには、ゼロから始まる番号を使用します。また、このアノテーションではエントリーを単一のパーティションに配置するようにも指示しています。

データをパーティショニングするために選択するキーは重要です。なぜなら、パーティション・キーを使用しないクエリーは、複数のパーティションにまたがって実行されるからです。クエリーを単一のパーティションで実行すれば、それ以外のパーティションが解放されて他のクエリーを (並行して) 実行できるため、スループットの向上という結果がもたらされます。

一例として、従業員の EMAIL (パーティション・キー) を使用して従業員テーブルをパーティショニングするとします。その場合、SELECT FIRSTNAME, LASTNAME FROM EMPLOYEE WHERE EMAIL = "bob@acme.com"; というクエリーは、単一のパーティションで実行されます。

各従業員の e-メール・アドレスは一意であるため、この指定された e-メール・アドレスを持つ従業員は 1 人しかいいません。その一方、SELECT EMAIL FROM EMPLOYEE WHERE LASTNAME = "Smith"; のように、クエリーでパーティション・キーではないフィールドを使用すると、クエリーはすべてのパーティションにまたがって実行されるため (マルチパーティション・クエリー)、全体的なスループットが低下します。

これは、「Smith」という苗字 (LASTNAME) の従業員が複数名いる可能性がある (つまり、一意ではない) からであり、それゆえにすべてのパーティションに対してクエリーを実行しなければならなくなります。

こうした理由から、できるだけ多くのクエリーが単一のサイトで実行されるようにするには、始めに一連のクエリー (および、それらクエリーの実行頻度) を検討してから、それらのクエリーに応じて適切にテーブルをパーティショニングしてください。


テーブルのレプリケーション

テーブルをパーティショニングすることに加え、すべてのサイトにテーブルをレプリケーションすることもできます。例えば、架空の会社 Acme Inc. に存在する部門を記録するために、スキーマにテーブルを追加するとします。この場合、テーブル定義 (ddl.sql) はリスト 9 のようになります。

リスト 9. ddl.sql
CREATE TABLE DEPARTMENT (
    DEPARTMENT_ID INTEGER NOT NULL,
    NAME VARCHAR(100) NOT NULL,
    PRIMARY KEY (DEPARTMENT_ID)
);

従業員テーブルにも、従業員が所属する部門を参照する列を追加する必要があります。

すべてのサイトでのレプリケーション対象として有力候補となるのは部門テーブルです。というのも (少なくともこの記事では) この架空の会社には少数の部門しかなく、部門テーブルは主に読み取り専用であるからです。テーブルをパーティショニングする代わりにレプリケーションを作成することで、「bob@acme.com という e-メール・アドレスの従業員が働いている部門の名前は何か?」といったクエリーを単一のサイトで実行して応答できるようになります。また、複数のパーティションで結合操作を行う必要もなくなります ― 従業員データは、従業員の e-メール・フィールドに基づいてパーティショニングされることを思い出してください。

部門テーブルに対して結合操作を行うクエリーの例は、記事に付属のソース・コードに含まれる EmployeeDetails.java を参照してください。

テーブルをパーティショニングするのではなく、テーブルのレプリケーションを行うように VoltDB に指示するには、プロジェクト定義ファイル (project.xml) のパーティション・セクションからテーブルの名前を除外し、リスト 10 に示すようにストアード・プロシージャーで @ProcInfo アノテーションを宣言します。

リスト 10. @ProcInfo アノテーションを宣言する
@ProcInfo (
    singlePartition = false
)

これにより、テーブルのパーティショニングの代わりにレプリケーションが行われます。


アプリケーションの実行

この記事に付属のサンプル・アプリケーションを実行するには、まず始めにソース・コードをコンパイルして、ランタイム・カタログをビルドする必要があります。それには、プロジェクト・フォルダーのルートで、コマンド $ ant compile を実行してください。

このコマンドにより、ソースがコンパイルされ、ランタイム・カタログ (acme.jar) がビルドされます。

データベースを起動するには、プロジェクト・ディレクトリーのルートからリスト 11 のコマンドを実行します。

リスト 11. データベースを起動する
$ voltdb start \
    leader localhost \
    catalog acme.jar \
    deployment deployment.xml

あるいはコマンド $ ant server を実行して、ソースのコンパイル、ランタイム・カタログのビルド、サーバーの起動を一度にまとめて実行することもできます。

データベース・サーバーが稼働状態になったところで、データベースに対していくつかのクエリーを実行します。新しいターミナル・ウィンドウを開き、プロジェクト・ディレクトリーから $ ant client を実行して、クライアント・アプリケーションを起動します。

このコマンドにより、データベースに対するいくつかのクエリーを実行するクライアントが起動されます。このクライアントが実行する内容については、クライアントを実装するコード (Client.java) を調べてください。

データベースが稼働状態になったら、クラスター内の各ノードを個別にシャットダウンしてデータベースを停止してください。この記事のアプリケーションはローカル・マシン上でのみ実行されるので、このようにしても問題ではありません。データベースを起動したターミナル・ウィンドウから Control-C を押すだけでデータベースを停止することができます。複数のノードを含むクラスターを使用している場合、各ノードを個別にシャットダウンするのはかなり面倒です。その場合、VoltDB に用意されている @Shutdown プロシージャーを使用すれば、データベース・クラスター全体がシャットダウンされます (リスト 12 を参照)。

リスト 12. データベースをシャットダウンする (ShutdownClient.java)
try {
    client.callProcedure("@Shutdown");
} catch (Exception e) {
    // An exception is expected here as 
    // when the database server is shut down
    // it breaks the database connection to the client.
    System.out.println("Shutdown request has been sent.");
}

データベースを停止するには、新しいターミナル・ウィンドウを開いて、プロジェクト・ディレクトリーからコマンド $ ant shutdown を実行します。

注: この記事の build.xml ファイルには、すでにシャットダウン・タスクが追加されています。記事に付属のコードを使用しない場合は、ビルド・ファイルにシャットダウン・タスクを追加する必要があります。


永続性 (Durability) を表す D

このセクションでは、VoltDB がどのように永続性を実現しているかを説明するとともに、障害発生時のデータ損失を防ぐためにデータベースをバックアップする方法を紹介します。

導入部分で述べたとおり、VoltDB は ACID 特性を備えています。永続性の要件 (ACID の「D」) は、トランザクションがコミットされると、停電やシステム障害が発生した場合でもコミットされたトランザクションが維持されることを意味します。つまり、データは失われないということです。

VoltDB はインメモリー・データベースであるにもかかわらず、どのように永続性を実現しているかについては、言及しておく価値があります。何らかの理由でデータベースがシャットダウンした場合、すべてのデータはメモリーから削除されます。結局のところ、メモリーは揮発性ストレージ・メディアです。VoltDB はデータを保存するために、スナップショットを使用します。

スナップショットとは、まさにその名前が示唆するとおり、データベースに保管されているデータの特定の時点でのスナップショットです。VoltDB は、一定の間隔で自動的にスナップショットを作成して、それらのスナップショットをディスクに永続化するように構成することができます。何らかの理由でデータベースがシャットダウンしたとしても、ディスクに永続化されているスナップショットを使用すれば、シャットダウン前の状態にデータベースを戻すことができます。このように構成するには、プロジェクト・ディレクトリーにあるデプロイメント・ファイル deployment.xml を開いて、リスト 13 のように編集します。

リスト 13. deployment.xml
<?xml version="1.0"?>
<deployment>
    <cluster hostcount="1" sitesperhost="2" />
    <paths>
        <voltdbroot path="/tmp" />
        <snapshots path="/tmp/autobackup" />
    </paths>
    <httpd enabled="true">
        <jsonapi enabled="true" />
    </httpd>
    <snapshot prefix="acmesave"
              frequency="2m"
              retain="3" />
</deployment>

リスト 13 で VoltDB に指示している内容は、2 分間隔で /tmp/autobackup 内にバックアップを作成すること、そして最後の 3 つのスナップショットを保持することです。古いスナップショットは、retain で指定された制限数に達すると削除されます。実際には、スナップショットの保存先をネットワーク接続された (NFS を使用して) マウント・ロケーションにして、スナップショットが別の場所に保管されるようにすることが理想的です。

編集したデプロイメント・ファイルを保存してから、データベースを再起動します。この時点まで、スナップショットは有効にされていなかったので、再起動後には (クライアントの実行時に追加された) すべての現行データが失われます。したがって、データベースが再び稼働状態になったら、クライアントを再度実行してデータをリロードする必要があります。数分すると、/tmp/autobackup フォルダーにデータベースのスナップショットが格納されているはずです。

データベースを再びシャットダウンしてください。ただし、今回はデータベースを起動するときに recover オプションを使用します。スナップショットを有効にして recover オプションを指定すると、VoltDB はスナップショット・パスから検出された最後のスナップショットを使用して、自動的にデータベースを前の状態に戻します。ただし注意する点として、recover オプションを使用してデータベースを起動しようとすると、スナップショットが検出されなければデータベースは起動されません。

データベースを前の状態にリストアするように VoltDB に指示するには、リスト 14 のコマンドを実行します。

リスト 14. VoltDB にデータベースのリストアを指示する
$ voltdb recover \
    leader localhost \
    catalog acme.jar \
    deployment deployment.xml

クライアントを再実行すると (ant client)、今度は全部で 5 つの従業員レコードが見つかるはずです。スナップショットが有効でない状態でデータベースを起動したときには、クライアントの 1 回目の実行での従業員数はゼロでした。


例: VoltCache

それでは、VoltDBをベースに作成された実際のアプリケーションである VoltCache について簡単に見ていきましょう。

VoltDB ディストリビューションには、いくつかのサンプル・アプリケーションが付属しています。その 1 つが、VoltCache です。VoltCache は VoltDB をベースに実装されたキー・バリュー型ストアであり、memcached対応の API を使用してアクセスすることができます (memcached はよく使用されている分散キャッシング・システムです)。VoltCache を稼働状態にするには、2 つのステップが必要となります。

まず、VoltDB アプリケーションを起動します。サーバーを起動するには、リスト 15 のコマンドを実行します。

リスト 15. サーバーを起動する
$ cd ~/voltdb-2.5/examples/voltcache
$ ./run.sh server

上記のコマンドにより、(必要な場合には) ソース・コードのビルドが行われ、VoltDB が起動されます。次に、同じディレクトリーで、ただし別のターミナル・ウィンドウからコマンド $ ./run.sh memcached-interface を実行してください。

このコマンドは、memcached API (テキスト・プロトコル) を模倣するアプリケーションを起動します。このアプリケーションは、memcached サーバーのデフォルト・ポートであるポート 11211 でリッスンします。

リスト 16 に記載する telnet セッションの例では、キー foo を値 bar に関連付けた後、このキーを再び取得します。

リスト 16. telnet セッションの例
$ telnet localhost 11211
set foo 0 60 3
bar
STORED
get foo
VALUE foo 0 3 0
bar
END
quit

あるいは、使用可能な多数の memcache クライアント・ライブラリーのうちの 1 つを使用することもできます。

このアプリケーションのソース・コードは VoltDB のディストリビューションに含まれているので、ソース・コードを調べてその動作を理解してください。


まとめ

VoltDB は、データ整合性を犠牲にすることなくスケーラビリティーを実現するインメモリー・データベースです。この記事では、VoltDB に用意されている機能のいくつかを簡単に説明しました。それ以外にも、ライブ・データのエクスポート機能や、非同期プロシージャー呼び出し機能、そして VoltDB と Web アプリケーションを直接統合することを可能にする JSON API など、さまざまな機能を調べることができます。


ダウンロード

内容ファイル名サイズ
Article source codevoltdb-source.zip7KB

参考文献

学ぶために

製品や技術を入手するために

  • IBM 製品の評価をご自分に最適な方法で行ってください。評価の方法としては、製品の評価版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。プロフィールで選択した情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, Java technology
ArticleID=952239
ArticleTitle=VoltDB 入門
publish-date=11142013