基礎使用#
参考 https://docs.turso.tech/quickstart#select-all-rows-from-table クイックスタートドキュメント
- turso cli をインストール
- turso にログイン、登録
- データベースを作成
- データベースの状態を表示
- データベースシェルに入る
- sql を記述してテーブルを作成、データを挿入、データをクエリ - この部分は後で drizzle で完了します
- データベースを別のリージョンにコピー locations
使用は比較的簡単で、今後のビジネスではデータベース接続に sdk と http 接続の 2 つのオプションがあります
- db の url を取得
- jwt のトークンを取得
@libsql/client
をインストールcreateClient
に基づいてクライアントを作成- クライアントが sql を実行
drizzle ORM に基づいて#
関連:
- [[Drizzle ORM ドキュメント速通]]
- [[01-sqlite と Cloudflare D1 を探索する]]
- [[node + sqlite]]
- [[better-sqlite3]]
drizzle と sqlite は一流のサポートを持ち、AstroDB も drizzle を基にして封装されています。
使用方法
drizzle-orm
と@libsql/client
依存関係をインストール- sql を生成し、マイグレーション sql 開発操作のために
drizzle-kit
開発依存関係をインストールdrizzle-kit generate
で生成drizzle-kit migrate
でマイグレーションdrizzle-kit studio
でページを表示
- db の uri と jwt トークンを取得
db/schema.ts
を作成してテーブル定義をエクスポートdrizzle.config.ts
を設定してスキーマの位置、ドライバ、接続パラメータを設定- libsql を使用してクライアントインスタンスを作成し、drizzle でラップ
- スキーマを変更したら sql を生成し、マイグレーションでデータベースを移行
- studio の方法でデータを表示
ドキュメントには、sentry を使用して sql の遅いクエリや sql エラーを取得できると追加で記載されています。
http ベースの方法#
libsql リモートプロトコル
- db の url とトークンを取得
- http の url に
/v2/pipeline
を補完 - json のペイロードパラメータを準備し、execute と close
- post を使用して送信し、結果をクエリ
- 送信中にパラメータのインデックスとパラメータ名が言及されました
なぜ close する必要があるのか?close しない場合、10 秒以内に ctx に基づいて続行できます。
この方法は http に基づいており、独自の接続オプションに属し、どんな場面でも簡単に接続できます。面白いですね。
キーワードの説明#
- sqlite は db 自体
- turso は全体のソリューションのラッピング
docker 自己ホスティング#
以下を使用して認証なしでホストされた libsql-server をインターセプトできますが、jwt 認証付きのものはまだ確認する必要があります。
ドキュメントのアドレス
https://github.com/tursodatabase/libsql/blob/main/docs/DOCKER.md
m1 チップの Apple でこれを使用
docker run --name some-sqld -p 8080:8080 -ti \
-e SQLD_NODE=primary \
--platform linux/amd64 \
ghcr.io/tursodatabase/libsql-server:latest
データの永続化
環境変数
- sqld_node=primary/replica/standalone
- データボリューム
-v sqld-data:/var/lib/sqld
- db の位置、本質的には sqlite で、
SQLD_DB_PATH=iku.db
- リモート jwt 認証
sqld_auth_jwt_key_file
に key.pem プライベートキーを渡す、- または
SQLD_AUTH_JWT_KEY
を使用して文字列を直接渡すこともできます
- または
jwt はどのようなものか、今後 http を通じて接続し操作できることを期待しています
{
"requests": [
{ "type": "execute", "stmt": { "sql": "SELECT * FROM users" } },
{ "type": "close" }
]
}
ホスティングサービスのクイックコード#
# url を表示
turso db show my-db --http-url
# トークン
turso db tokens create my-db
参考 https://www.json.cn/jwt/
https://jwt.io/
// ヘッダー
{
"alg": "EdDSA",
"typ": "JWT"
}
// ペイロード
{
"iat": 1726756735,
"id": "81220406-4854-4d4b-817e-61f4a092cdc4"
}