category icon
2022-11-30
SurrealDB

SurrealDB を使ってみる

surreal
v1.0.0-beta.8
profile
hikaru
Software Developer / DIY'er

Windows 11 Pro 64bit 環境 の WSL2(Ubuntu) 上にインストールして、実際に動作を確認してみました。

WSL2 の Ubuntu 環境に SurrealDB をインストール

shell
$ curl -sSf https://install.surrealdb.com | sh

インストールは数秒で完了しました。

パスを通しておきます。以下の <username> には自分の環境に応じて変更します。

shell
$ PATH=/home/<username>/.surrealdb:$PATH

以下の help コマンドが実行できればインストール成功です。

shell
$ surreal help

SurrealDB を起動

とりあえず実験用に SurrealDB をメモリデータベースとして起動してみます。

shell
$ surreal start --log debug --user root --pass root memory


 .d8888b.                                             888 8888888b.  888888b.
d88P  Y88b                                            888 888  'Y88b 888  '88b
Y88b.                                                 888 888    888 888  .88P
 'Y888b.   888  888 888d888 888d888  .d88b.   8888b.  888 888    888 8888888K.
    'Y88b. 888  888 888P'   888P'   d8P  Y8b     '88b 888 888    888 888  'Y88b
      '888 888  888 888     888     88888888 .d888888 888 888    888 888    888
Y88b  d88P Y88b 888 888     888     Y8b.     888  888 888 888  .d88P 888   d88P
 'Y8888P'   'Y88888 888     888      'Y8888  'Y888888 888 8888888P'  8888888P'


[2022-11-02 20:54:27] INFO  surrealdb::iam Root authentication is enabled
[2022-11-02 20:54:27] INFO  surrealdb::iam Root username is 'root'
[2022-11-02 20:54:27] INFO  surrealdb::dbs Database strict mode is disabled
[2022-11-02 20:54:27] INFO  surrealdb::kvs Starting kvs store in memory
[2022-11-02 20:54:27] INFO  surrealdb::kvs Started kvs store in memory
[2022-11-02 20:54:27] INFO  surrealdb::net Starting web server on 0.0.0.0:8000
[2022-11-02 20:54:27] INFO  surrealdb::net Started web server on 0.0.0.0:8000
[2022-11-02 21:00:47] DEBUG surrealdb::iam Authenticated as super user
[2022-11-02 21:00:47] DEBUG surrealdb::dbs Executing: INFO FOR DATABASE

インメモリとオンディスク

shell
# インメモリ動作 (SurrealDBを終了するとDBは破棄されます)
$ surreal start --log debug --user root --pass root memory

# オンディスク動作 (DBはディスク上に保存されます)
$ surreal start --log debug --user root --pass root file://my-testing-directory

SIGNUP と SIGNIN の定義作成

shell
$ surreal sql --conn http://localhost:8000 --user root --pass root --ns test --db test
SQL
# accountテーブル: SCHEMAFULLのテーブルを作成する
DEFINE TABLE account SCHEMAFULL
  PERMISSIONS
    FOR select, update WHERE id = $auth.id,
    FOR create, delete NONE;

# accountテーブル: テーブルのフィールドを指定する
DEFINE FIELD name  ON TABLE account TYPE string;
DEFINE FIELD email ON TABLE account TYPE string ASSERT is::email($value);
DEFINE FIELD pass ON account TYPE string;

# accountテーブル: メールフィールドに一意のインデックスを追加して値の重複を防ぐ
DEFINE INDEX email ON TABLE account COLUMNS email UNIQUE;

# allusersセッションスコープを定義
DEFINE SCOPE allusers
  SESSION 14d
  SIGNUP ( CREATE account SET name = $name, email = $email, pass = crypto::argon2::generate($pass) )
  SIGNIN ( SELECT * FROM account WHERE email = $email AND crypto::argon2::compare(pass, $pass) );

HTTP 通信で動作を確認してみる

HTTP API を投げれる適当なツールを使って以下の内容を post します。なお、私は Postman をよく使っています。

  • http メソッド
    post

  • url
    http://localhost:8000/sql

  • 認証
    認証方式: Basic Auth
    username: root
    password: root

  • headers
    Accept: application/json
    NS: test
    DB: test

  • body
    INFO FOR DB;

実行結果
[
    {
        "time": "69µs",
        "status": "OK",
        "result": {
            "dl": {},
            "dt": {},
            "sc": {},
            "tb": {}
        }
    }
]