naoki86star

インターネットの片隅でなにかしら書いてみる

voltdb-client by clojure

clojureというjava-based lips系言語を使ってvoltdb-serverにつないでみる

voltdbのワイヤプロトコルを全部書くとかいうのでなく、voltdbのjarライブラリをインポートしてそのメソッドを呼ぶという方法、つないでレコード読み出す単純機能レベルなのでまんまjavaのメソッドの羅列
読み出したデータをガリガリ処理するところからがclojure の本領部分なんだろうと

(ubuntu16のaptでinstallした/usr/bin/clojure呼び出し:maven repogitoryからのclojureは起動スクリプトが違うらしくてまた今度調べる)

ubuntu@voltdb1:~$ clojure -cp /path/to/voltdbclient-8.2.2.jar
Clojure 1.6.0
user=> (ns user (:import org.voltdb.client.ClientConfig))
nil
user=> (ns user (:import org.voltdb.client.ClientFactory))
nil
user=> (def config (new org.voltdb.client.ClientConfig))
#'user/config
user=> (def client (org.voltdb.client.ClientFactory/createClient config))
#'user/client
user=> (.createConnection client "localhost")
nil
user=> (first (.getResults (.callProcedure client "@Statistics" (into-array Object [ "latency" 1 ]))))
#<VoltTable  header size: 138
 status code: -128 column count: 13
 cols (TIMESTAMP:BIGINT), (HOST_ID:INTEGER), (HOSTNAME:STRING), (INTERVAL:INTEGER), (COUNT:INTEGER), (TPS:INTEGER), (P50:BIGINT), (P95:BIGINT), (P99:BIGINT), (P99.9:BIGINT), (P99.99:BIGINT), (P99.999:BIGINT), (MAX:BIGINT),
 rows -
  1579856505106,0,voltdb1,5000,0,0,0,0,0,0,0,0,0
  1579856506962,1,voltdb2,5000,0,0,0,0,0,0,0,0,0
  1579856503067,2,voltdb3,5000,0,0,0,0,0,0,0,0,0

org.voltdb.client.Client#callProcedureには可変長引数があって、それのclojureでの呼び方を調べる部分に時間かかった。

終わってから探してみたらgithubにいくつか例があがってましたー。コードの書かれた時期によりロードされてるjarのversionが違うのはそうなってしまうので使っていくならばclojure部分のラップdefn定義いります。