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定義いります。