LoginSignup
3
2

More than 5 years have passed since last update.

RethinkDB on Docker - Part1: 30 Seconds

Last updated at Posted at 2015-05-25

ClojureのWebアプリのJSONストレージとしてRethinkDBを使ってみようと思います。まずは何も考えずにさくっとDockerで起動してみます。30秒でできるQuick Startとやってみる気になります。developer friendlyを謳うだけのことがありドキュメントサイトがとても充実しています。

Dockerイメージ

RethinkDBにはオフィシャルイメージがあります。latestのバージョンは2.0.2でした。

Docker Hubからイメージをpullしてからカレントディレクトリにデータボリュームをマップしてrunします。

$ mkdir ~/rethinkdb_apps
$ cd !$
$ docker pull rethinkdb
$ docker run --name rethinkdb -v "$PWD:/data" -d rethinkdb

起動に成功しました。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                            NAMES
8ab92f373592        rethinkdb:latest    "rethinkdb --bind al   8 seconds ago       Up 7 seconds        8080/tcp, 28015/tcp, 29015/tcp   rethinkdb

ngrok

今回はお試しなのでngrokでトンネルしてクラウドで動かしているDockerコンテナにローカルから接続します。

inspectしてコンテナのIPアドレスを確認します。

$ RETHINK_IP=$(docker inspect --format={{ .NetworkSettings.IPAddress }}" rethinkdb)
$ echo $RETHINK_IP
172.17.0.249

ngrokのイメージをpullして起動します。トンネルしてアクセスできるランダムなURLを生成してくれます。

$ docker pull wizardapps/ngrok
$ docker run -it --rm wizardapps/ngrok:latest ngrok $RETHINK_IP:8080
ngrok                                                           (Ctrl+C to quit)

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://3e826126.ngrok.com -> 172.17.0.251:8080
Forwarding                    https://3e826126.ngrok.com -> 172.17.0.251:8080
Web Interface                 0.0.0.0:4040
# Conn                        0
Avg Conn Time                 0.00ms

30秒でできるQuick Start

Thirty-second quickstart with RethinkDBのページをみながらRethinkDBを触ってみます。

ngrokがトンネルしてくれるURLにブラウザでアクセスします。

シンプルできれいなUIの管理画面です。

rethinkdb-web-admin.png

テーブルの作成

Data Exploler画面に移動します。上のテキストエリアにテーブルを作成するコードを入力します。RunボタンまたはShift+Enterキーを押すと実行されます。

r.db('test').tableCreate('tv_shows')

tableCreate.png

Tree ViewにJSON形式で処理結果が表示されました。

{
  "config_changes": [
    {
      "new_val": {
        "db": "test",
        "durability": "hard",
        "id": "25206b5d-3b66-4a48-b99f-16c8b74b418d",
        "name": "tv_shows",
        "primary_key": "id",
        "shards": [
          {
            "primary_replica": "8ab92f373592_i07",
            "replicas": [
              "8ab92f373592_i07"
            ]
          }
        ],
        "write_acks": "majority"
      },
      "old_val": null
    }
  ],
  "tables_created": 1
}

レコードの登録

作成したtv_showsテーブルにレコードを2件登録します。一度のinsert関数で複数件の登録ができます。

r.table('tv_shows').insert([{ name: 'Star Trek TNG', episodes: 178 },
                            { name: 'Battlestar Galactica', episodes: 75 }])

Tree Viewにinsertの結果が表示されます。

{
  "deleted": 0,
  "errors": 0,
  "generated_keys": [
    "834b3df0-d49b-4159-a202-d23d2c60c1eb",
    "73d5d449-d8cf-4b5a-b016-fff4152d787d"
  ],
  "inserted": 2,
  "replaced": 0,
  "skipped": 0,
  "unchanged": 0
}

レコードのカウントとクエリ

count()でカウントします。

r.table('tv_shows').count()

結果はinsertしたレコード数の2です。

2

フィルタに条件を指定してクエリします。

r.table('tv_shows').filter(r.row('episodes').gt(100))

episodesのフィールドが100より大きい条件なので該当は1件です。

  {
    "episodes": 178,
    "id": "834b3df0-d49b-4159-a202-d23d2c60c1eb",
    "name": "Star Trek TNG"
  }

Raw viewのタブに切り換えると表形式で見やすく表示してくれます。

quiery.png

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2