Dgraphとは
Dgraphは水平方向の拡張性に優れた分散グラフデータベース。ACIDトランザクション、Raftベースの一貫性のあるレプリケーション、高い可用性などを特徴とし、ディスク上でのデータの配列を制御することでクエリの性能やスループットを最適化する。FacebookのGraphQLライクなクエリシンタックスをサポートし、GRPCとHTTPを介してJSONとProtocol Buffersでレスポンスする。
引用元: mag.osdn.jp
・・・いろいろと分からない単語が並んでますが、とりあえず試してみます。
環境
Conoha(VPS)でお試し。
実行環境の準備
公式のDockerイメージがあるので、それをpullして実行。
・・・の前に、Dockerデーモンをインストールする。
# yum install docker # docker version Docker version 1.12.6, build ec8512b/1.12.6
実行
公式のTutorialに従ってコマンドを実行していく。
# mkdir -p ~/dgraph ( DGraph Zeroの実行 ) # docker run -it -p 8081:8081 -p 8080:8080 -p 9080:9080 -v ~/dgraph:/dgraph --name dgraph dgraph/dgraph dgraph zero --port_offset=-2000 ( DGraphの実行 ※上を実行したのと別のターミナルから実行する必要あり) # docker exec -it dgraph dgraph server --bindall=true --memory_mb 2048 --zero localhost:5080 ( ratel (DGraph UI) の実行 ) # docker exec -it dgraph dgraph-ratel
ここまで実行すると、8080ポートでDGraphに接続、8081ポートでGUIに接続できるようになる。
サンプルデータの流し込み
GUIに接続すると入力欄が現れるので、これも公式のTutorialのコードをコピペして実行していく。
ハマった点としては、チュートリアル中に「ENDPOINT:/ALTER」と記述があるので、それに合わせたラジオボタンをGUI上で選択しておく必要がある。
( データ定義 : ALTER で実行 [https://tour.dgraph.io/intro/3/] ) name: string @index(exact, term) . age: int @index(int) . friend: uid @count . ( データ作成 : MUTATE で実行 [https://tour.dgraph.io/intro/4/] ) { set { _:michael <name> "Michael" . _:michael <age> "39" . _:michael <friend> _:amit . _:michael <friend> _:sarah . _:michael <friend> _:sang . _:michael <friend> _:catalina . _:michael <friend> _:artyom . _:michael <owns_pet> _:rammy . _:amit <name> "अमित"@hi . _:amit <name> "অমিত"@bn . _:amit <name> "Amit"@en . _:amit <age> "35" . _:amit <friend> _:michael . _:amit <friend> _:sang . _:amit <friend> _:artyom . _:luke <name> "Luke"@en . _:luke <name> "Łukasz"@pl . _:luke <age> "77" . _:artyom <name> "Артём"@ru . _:artyom <name> "Artyom"@en . _:artyom <age> "35" . _:sarah <name> "Sarah" . _:sarah <age> "55" . _:sang <name> "상현"@ko . _:sang <name> "Sang Hyun"@en . _:sang <age> "24" . _:sang <friend> _:amit . _:sang <friend> _:catalina . _:sang <friend> _:hyung . _:sang <owns_pet> _:goldie . _:hyung <name> "형신"@ko . _:hyung <name> "Hyung Sin"@en . _:hyung <friend> _:sang . _:catalina <name> "Catalina" . _:catalina <age> "19" . _:catalina <friend> _:sang . _:catalina <owns_pet> _:perro . _:rammy <name> "Rammy the sheep" . _:goldie <name> "Goldie" . _:perro <name> "Perro" . } }
描画
流し込んだデータからグラフを描画してみる。
( データ取得 : QUERY で実行 [https://tour.dgraph.io/intro/5/] ) { everyone(func: anyofterms(name, "Michael Amit")) { name friend { name@ru:ko:en friend { expand(_all_) { expand(_all_) } } } } }
こんな感じで描画された。描画はツリー形式にもできる他、帰り値をjson形式で受け取ることも可能。
感想
Dockerイメージが配布されていたので、想定していたよりすんなりインストールして使い始めるまでたどり着けた印象。 「分散型」という部分は全く触れていないので、機会があればもう少し試してみたい。
おまけ
グラフへのデータ定義やデータ取得はGraphQLというので行っていたらしい。SQLとは勝手が違うので少し勉強する必要がありそう。