🌟

SolarSystemDB - Universal Serverless Database | 運用

2025/02/01に公開

導入

前回はSolarSystemDBの導入について書きました。今回はDB運用について、解説していきたいと思います。

ステージング

ブランチ間ではステージングと呼ばれる作業により安全にスキーマを複製することができます。
例としてdevブランチとmainブランチを用意します。
現在devブランチにはuserテーブルとitemテーブルが用意されています。

dev-branch

また、mainブランチにはuserテーブルが用意されていますが、devブランチに対してカラムが不足しています。

main-branch

この状態でdevブランチからmainブランチにステージングするには、「ステージング」タブに移動し、以下のようにコンソールに入力します。

staging-input

すると、devmainのdiffが表示され、何のテーブルやカラムがどのように変更されるかが、視覚的に表示されます。

staging-diff

変更内容を確認して問題なければ「ステージング」ボタンを押します。
これで、devブランチのスキーマがmainブランチに複製されました。

staging-after

ロール

チームメンバーには管理人ロールと支払い管理人ロールを割り振ることができます。
管理人ロールを持つユーザーはデフォルトでチームの作成者に設定されています。
管理者はクラスタやチームを削除する権限を持ち、複数人設定することが可能ですが、最低でも必ず1人以上設定する必要があります。

支払い管理者はチームのプランを決定し、その支払いを担当するロールになります。
こちらもデフォルトではチームの作成者に設定されています。

team-member

TimeTravel ロールバック

SolarSystemDBは、Cloudflare D1を基盤に構築されており、TimeTravelロールバック機能が使えます。これは、一般にPITR(ポイント・イン・タイム・リカバリ)と呼ばれるもので、過去30日間の任意の時刻にDBの状態を巻き戻すことができる機能です。
TimeTravelロールバック機能はブランチ単位で機能します。
機能を使用するには、「ブランチ」ページの中央にある「TimeTravel ロールバック」ボタンをクリックします。

time-travel

日時入力フォームが表示されるので、ロールバックしたい時刻を選択します。
過去30日以内の日時を指定する必要があるので注意です。

tme-travel-form

「Time Travel ロールバックを実行」ボタンをクリック後、「Time Travel ロールバックが正常に実行されました」と表示されれば、ロールバック完了です。

API

SolarSystemDBでは主にHTTP APIによってプログラムによるDBの操作が可能となっています。
ベースURLはhttps://api.solarsystemdb.comです。
なお、APIはバージョン管理されており、現在の最新バージョンはv1です。
バージョン指定すると、https://api.solarsystemdb.com/v1がベースURLとなります。
バージョン指定なしは、常に最新のバージョンを指します。

なお、いずれのエンドポイントもAPIキーによる認証が必須です。
AuthorizationヘッダーにBearer <YOUR-API-KEY>をセットすることで認証します。
APIキーはTopメニュー左上のアイコンから「設定」画面に移動し、メニュー最下部から発行できます。

api-key

キーは一度発行すると再度確認することはできません。
安全な場所に保管し忘れた際は再発行して下さい。

HTTP APIは、現在2種類のAPIが用意されています。
1つはSQLのクエリ、もう1つはTimeTravel ロールバックの実行です。

詳しく見ていきます。

1. SQLクエリ (POST: /query)

team_namecluster_namebranch_nameパラメータにより、クエリ先を指定し、sqlパラメータでクエリを発行します。paramsはプリペアドステートメントに使用します。

bodyパラメーター例(JSON)

{
    "team_name": "my_team",
    "cluster_name": "first_cluster",
    "branch_name": "dev",
    "sql": "SELECT * FROM planets",
    "params": []
}

レスポンス例

200 OK

{
  "errors": [
    {
      "code": 1000,
      "message": "message"
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message"
    }
  ],
  "result": [
    {
      "meta": {
        "changed_db": true,
        "changes": 0,
        "duration": 0,
        "last_row_id": 0,
        "rows_read": 0,
        "rows_written": 0,
        "size_after": 0
      },
      "results": [
        {}
      ],
      "success": true
    }
  ],
  "success": true
}

詳細なリクエスト・レスポンス内容は下記をご覧ください。

https://solarsystemdb.com/docs/api#/query

2. TimeTravel ロールバック (POST: /time-travel)

team_namecluster_namebranch_nameパラメータにより、ロールバックする対象を指定し、timestampパラメータでロールバックする時間を指定します。timestampは秒単位のUNIXタイムスタンプを使用します。

bodyパラメーター例(JSON)

{
    "team_name": "my_team",
    "cluster_name": "first_cluster",
    "branch_name": "dev",
    "timestamp": 1736931668
}

レスポンス例

200 OK

{
  "stdout": "stdout_message",
  "stderr": "error_or_warning_message"
}

詳細なリクエスト・レスポンス内容は下記をご覧ください。

https://solarsystemdb.com/docs/api#/time-travel

まとめ

今回は、ここまでとします。
次回は、参考までに本システムの設計やアーキテクチャ面について解説していきたいと思います。

Discussion