VoltDBクライアントラッパーを作ったお話

Posted: 2014-10-08 22:10 |  PHP全般 

たいしたものではないんですが

PHPカンファレンス2014のLTに登場するにあたって、
NewSQL絡みのちょっとしたお話をしますが、それに先駆けて
作ったVoltDBエクステンションのラッパーライブラリの紹介を!
VoltDB.PHPClientWrapper
エクステンションのコンパイルの仕方は以前の記事にありますのでそちらを参考にしてください!
    "require": {
        "php": ">=5.4.0",
        "ext-curl": "*",
        "ext-voltdb": "*",
        "ytake/voltdb-client-wrapper": "0.*"
    },
VoltDBエクステンションが無い場合はJSON I/Fとのやり取りのクラスのみ利用できます

VoltDB json API

$client = new \Ytake\VoltDB\HttpClient(new \Ytake\VoltDB\Parse);
Parseクラスはinterfaceを使っていただければ自由にお好みで変更できます
内部的にはcurlを使ってるだけなので簡単です
$result = $client->request('http://localhost')->get(['Procedure' => 'allUser'])->getResult();
GETとPOSTリクエストが利用できますが、
どちらもそんなに大差はないですね
    /** @var string  host */
    protected $host = "localhost"; // default

    /** @var string  api path */
    protected $path = "/api/1.0/";

    /** @var int json interface port */
    protected $apiPort = 8080; 
デフォルトは一般的なURIを指してますが、こちらも自由に環境に合わせることができます

MySQLなどのshow tables;とかは、JSON経由だと以下の様に取得できます
// default "OVERVIEW"
$client->request('http://localhost')->info()->getResult();
// DEVELOPMENT
$client->request('http://localhost')->info("DEPLOYMENT")->getResult();
簡単ですね!
続いて参りましょう

VoltDB extends Class

AdHocクエリー(いわゆる普通のクエリー)はこんな感じで
$connection = new \Ytake\VoltDB\Client(new \VoltClient, new \Ytake\VoltDB\Parse);
$connection->connect()->excute("SELECT * FROM users");
PDOではサポートされていないのと、エクステンションはオリジナルのものなのと、
javaのJDBCを利用してプリペアドステートメントなどが処理されてますので、
PHPでそれらの機能はサポートしてません!(できません)
ですので、おすすめはストアドプロシージャを使いましょう
それもこのように
$connection = new \Ytake\VoltDB\Client(new \VoltClient, new \Ytake\VoltDB\Parse);
$connection->connect()->procedure("Procedure-Name");
procedureの第二引数は配列で値が指定できますので、
よくあるDB関連のクラスと同じです

非同期クエリーは
$async = $connection->connect()->asyncProcedure("allUser");
// blocking and get result
$async->drain();
$async->asyncResult();
サンプルのままですが、 drain()が呼ばれるまでは結果がかえってきません
利用の仕方によっては面白いアプローチが出来ると思います
reactPHPと組み合わせて、非同期に特化したアプリケーションで面白い事が出来そうです!
 

about ytake

執筆に参加しています


Laravel お役立ち情報

share



このエントリーをはてなブックマークに追加

Categories

laravel 45

DTM 0

music 0

PHP全般 31

0

JAPAN 1

WORLD 1

javascript 4

RDBMS 1

NoSQL 1

NewSQL 1

Recent Posts

Ad

comments powered by Disqus

GitHub

Social Links

Author


クリエイティブ・コモンズ・ライセンス
Yuuki Takezawa 作『Ytake Blog』はクリエイティブ・コモンズ 表示 - 非営利 4.0 国際 ライセンス で提供されています。

© ytake/comnect All Rights Reserved. 2014