VoltDB ストアドプロシージャと共に


VoltDBの特徴としてあげられるのは、
高速な処理や非同期に特化した機能もそうですが、
javaで実装されている点も、特徴の一つです。
NuoDBも同じ分類のNewSQLと呼ばれるものですが、
javaを普段から触っている方には比較的簡単に利用できると思います。

VoltDBはjava, C++, php, node.jsなど各言語で利用できる様に
クライアントが用意されているほか、
jsonでやり取りが出来るAPIを持っています。
そのAPIや各クライアントから簡単に利用するには、
ストアドプロシージャを理解する必要があります。

とは言ってもそこまで難しいものではありませんので、簡単に使ってみましょう。
もちろんjavaで実装できますが、今回は定義だけでやってみましょう

users.sql
CREATE TABLE users (
   user_id INTEGER UNIQUE NOT NULL,
   user_name VARCHAR(40) NOT NULL,
   created_at TIMESTAMP NOT NULL
);

テーブルをパーティション化

PARTITION TABLE users ON COLUMN user_id;

integer (TINYINT, SMALLINT, INTEGER, or BIGINT)
string (VARCHAR)
が利用可能です

CREATE PROCEDURE addUser AS 
    INSERT INTO users VALUES (?, ?, CURRENT_TIMESTAMP);
PARTITION PROCEDURE addUser ON TABLE users COLUMN user_id;

続いてinsertのストアドプロシージャです。
API、または各言語のクライアントから実行するときに、
PHPですあれば、PDOが対応していないため、
phpから実行する場合は、直接SQLを@AdHocで発行するか、
ストアドプロシージャを利用します。

APIで利用する場合は、下記の様になります。

http://localhost:8080/api/1.0/?Procedure=addUser&Parameters=["2", "hello"]

また全件SELECTも下記の様にすると、

CREATE PROCEDURE allUser AS SELECT * FROM users;
http://localhost:8080/api/1.0/?Procedure=allUser

となります。

デフォルトで用意されているAPIもいくつかあります。
例えばシステムの情報を取得する場合は下記の様にします。

http://localhost:8080/api/1.0/?Procedure=@SystemInformation

各クライアントから利用する場合もほぼ同様にして利用します。
クラスターなども簡単に出来ますので是非触ってみて下さい。