2020-10-09に更新

無心でDgraph入門

Dgraphの起動とスキーマ定義

目標

とりあえず動かすして遊べるようにする.

前提

  • Dockerのインストール

Dgraphクラスタの構造

ノード名 説明
Zero Dgraph Zero controls the Dgraph cluster, assigns servers to a group, and re-balances data between server groups.
Alpha Dgraph Alpha hosts predicates and indexes.
Ratel Ratel serves the UI to run queries, mutations & altering schema.

ついでにpredicateとindexの説明.

用語 説明
Predicate Predicates are either the properties associated with a node or the relationship between two nodes.
Index Indexes are the tokenizers that can be associated with the predicates to enable filtering using appropriate functions.

Get Started - Quickstart Guideから引用

少し補足するとPredicateとはノードのプロパティやノードを繋ぐエッジのことです. Indexは他のデータベースと大体同じ意味で索引付けのことで検索するときに指定します.

Dgraphコンテナ

とりあえずお試しで動かすならdgraph/standaloneというイメージを使います.

docker pull dgraph/standalone:v20.03.0

起動は以下のようにします.

docker run --name first-dgraph --rm -it -p 8080:8080 -p 9080:9080 -p 8000:8000 -v my-vol:/dgraph dgraph/standalone:v20.03.0

とりあえ

オプション 説明
name 実行されるコンテナのインスタンスに付けられる名前です
rm 停止するときにコンテナが削除されます
it interactive ttyでttyを通じてコンテナとやり取りできます. 今回はひたすらログが流れてきます.
0 ポート・フォーワーディングといってホストとクライアントの間でポートの対応を付けを行います
v ボリュームをマウントします. my-volはdockerが管理するボリュームで/dgraphがコンテナ側のマウントポイントです

注意点はボリュームのマウント・ポイントは/dgraphに指定する必要があります. しないとrmオプションの効果でコンテナを停止するとデータごと消えてしまいます(お試しだから良いのかもしれませんが).

実行後以下のコマンドでmy-volボリュームが作られていることを確認しましょう.

docker volume ls

Ratel UIを使ったSchema編集

Ratel UIへのアクセス

http://localhost:8000/にアクセスします.

image

真ん中のLatestを選びます.

image

スキーマの設定やデータの投入, クエリなどを実行できます.

スキーマを設定する

スキーマの設定方法は2つあります.

  1. データを投入する
  2. 手動でスキーマを定義する

基本的にノードを投入すると自動的にスキーマが定義されます. そのため一度スキーマを定義しても新しいプレディケートがあると勝手にスキーマが更新されます.

例えばConsoleのMutationタブに以下をコピペします.

{
  "set":[
    {
      "name": "Michael",
      "age": 40
    }
  ]
}

Runをクリックするとスキーマが生成されます. 左のSchemaタブを選ぶとプレディケートとタイプが表示されます.

image

次にアドレスというプレディケートを加えて新しいデータを投入します.

{
  "set":[
    {
      "name": "Michael",
      "age": 40,
      "e-mail" : "example.com"
    }
  ]
}

するとe-mailというプレディケートが追加されました.

image

このため導入するデータのバリデーションはアプリケーション側で行うのが良さそうです.

スキーマを設定する利点

ではスキーマが無駄なのかというと, そうでもないようです. Ratel UIでQueryを入力する際に補完されるようになるようです. ただ階層とかは考慮してくれないようです.

image

補足

Dockerのボリューム

ボリュームにはもう一つマウント・ボリュームというのがあります. こちらもホスト側のフォルダをコンテナ側にマウントする点は同じですが, フォルダを自分で指定する必要があります. DockerはWindows, macOS, そして各Linuxディストリビューションで提供されマルティ・プラットフォームでコンテナを動かすことができます. しかしこのマウント・ポイントを指定してしまうと互換性がなくなってしまう可能性があります. そこで後からDocker側がボリュームを管理するような仕組みが導入されたようです. 領域はDockerの管理下にあるので, プラットフォームごとの際はDockerが吸収してくれます.

docker volume create my-vol

などで作ることができます. 例えばデータの投入は以下のようにします.

Reference

Drop all data from Dgraph

ツイッターでシェア
みんなに共有、忘れないようにメモ

ブレイン

Androidアプリ開発者を目指しています. 興味あることリスト: https://t.co/ew3bb6grdJ Github: https://t.co/9btqysHqWr Qiita: https://t.co/ZVRhjouauX

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント