🙌

SurrealDBのデータを永続化(persistent)する

2022/11/13に公開

※ 2022/11/15: volumesへのバインドについて追記してタイトルを変更

SurrealDB、いじってます

環境

surreal 1.0.0-beta.8+20220930.c246533 for linux on x86_64

永続化したい

SurrealDBとはなんぞや、という話についてはいったん割愛します。

おもしろそうなので触ってみているところなのですが、dockerでSurrealDBを立ち上げるにあたって、「永続化どうやるの?」という疑問にぶち当たりました。

mysqlやpostgresqlだとデータを保存しているファイルがあって、そのファイルの格納先であるディレクトリをホストのディレクトリに丸ごとマウントしたりする、あれです。

こうするようです

compose.yaml
services:
  surrealdb:
    container_name: surrealdb
    image: surrealdb/surrealdb:latest
    command: start --log debug --user root --pass root file://database # <- コレ
    ports:
      - "8000:8000"
    volumes:
      - type: bind
        source: ./surrealdb/database  # <- マウント先はお使いの構成に合わせてよしなに
  target: /database

公式のQuick Startではmemoryのように記述してオンメモリ動作を指定していたオプションに、fileスキーマでディレクトリを指定すると、そこへ永続化します。このfile://databaseはコンテナ内に作られますので、volumesでホストのディレクトリにバインドしてあげればよいです。

ちなみにdocker compose up -dで起動直後のdatabaseディレクトリはこんな感じになりました。何がなんのファイルかまではよくわかってませんが、とりあえずログはLOGファイルに順次追記されていくようです。

❯ tree .
.
├── 000004.log
├── CURRENT
├── IDENTITY
├── LOCK
├── LOG
├── MANIFEST-000005
└── OPTIONS-000007

せっかくなので後ほど「使ってみた」記事も書いてみようと思います。

ではまた!

追記(2022/11/15)

ファイルシステムへのマウントは非推奨とのことで追記しました。Volumeに永続化する場合はこうなります。

compose.yaml
services:
  surrealdb:
    container_name: surrealdb
    image: surrealdb/surrealdb:latest
    command: start --log debug --user root --pass root file://database # <- コレ
    ports:
      - "8000:8000"
    volumes:
      - type: volume
        source: surrealdbdata  # volume名はよしなに。volumesで定義した名前と合っていればOKです。
  target: /database

volumes:
    surrealdbdata:  # <- この名前を合わせます

参考記事

Discussion