辛宝Otto

辛宝Otto 的玄酒清谈

北漂前端程序员儿 / 探索新事物 / Web Worker 主播之一/内向话痨
xiaoyuzhou
email

Turso LibSQL ドキュメント速通

Turso LibSQL ドキュメント速通

基礎使用#

参考 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"
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。