SolarSystemDB - Universal Serverless Database | 運用
導入
前回はSolarSystemDBの導入について書きました。今回はDB運用について、解説していきたいと思います。
ステージング
ブランチ間ではステージングと呼ばれる作業により安全にスキーマを複製することができます。
例としてdev
ブランチとmain
ブランチを用意します。
現在dev
ブランチにはuser
テーブルとitem
テーブルが用意されています。
また、main
ブランチにはuser
テーブルが用意されていますが、dev
ブランチに対してカラムが不足しています。
この状態でdev
ブランチからmain
ブランチにステージングするには、「ステージング」タブに移動し、以下のようにコンソールに入力します。
すると、dev
とmain
のdiffが表示され、何のテーブルやカラムがどのように変更されるかが、視覚的に表示されます。
変更内容を確認して問題なければ「ステージング」ボタンを押します。
これで、dev
ブランチのスキーマがmain
ブランチに複製されました。
ロール
チームメンバーには管理人ロールと支払い管理人ロールを割り振ることができます。
管理人ロールを持つユーザーはデフォルトでチームの作成者に設定されています。
管理者はクラスタやチームを削除する権限を持ち、複数人設定することが可能ですが、最低でも必ず1人以上設定する必要があります。
支払い管理者はチームのプランを決定し、その支払いを担当するロールになります。
こちらもデフォルトではチームの作成者に設定されています。
TimeTravel ロールバック
SolarSystemDBは、Cloudflare D1を基盤に構築されており、TimeTravelロールバック機能が使えます。これは、一般にPITR(ポイント・イン・タイム・リカバリ)と呼ばれるもので、過去30日間の任意の時刻にDBの状態を巻き戻すことができる機能です。
TimeTravelロールバック機能はブランチ単位で機能します。
機能を使用するには、「ブランチ」ページの中央にある「TimeTravel ロールバック」ボタンをクリックします。
日時入力フォームが表示されるので、ロールバックしたい時刻を選択します。
過去30日以内の日時を指定する必要があるので注意です。
「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メニュー左上のアイコンから「設定」画面に移動し、メニュー最下部から発行できます。
キーは一度発行すると再度確認することはできません。
安全な場所に保管し忘れた際は再発行して下さい。
HTTP APIは、現在2種類のAPIが用意されています。
1つはSQLのクエリ、もう1つはTimeTravel ロールバックの実行です。
詳しく見ていきます。
1. SQLクエリ (POST: /query)
team_name
、cluster_name
、branch_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
}
詳細なリクエスト・レスポンス内容は下記をご覧ください。
2. TimeTravel ロールバック (POST: /time-travel)
team_name
、cluster_name
、branch_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"
}
詳細なリクエスト・レスポンス内容は下記をご覧ください。
まとめ
今回は、ここまでとします。
次回は、参考までに本システムの設計やアーキテクチャ面について解説していきたいと思います。
Discussion