辛宝Otto

辛宝Otto 的玄酒清谈

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

Turso LibSQL 文件速通

Turso LibSQL 文檔速通

基礎使用#

參考 https://docs.turso.tech/quickstart#select-all-rows-from-table 快速入門文檔

  • 安裝 turso cli
  • 登錄、註冊 turso
  • 創建一個資料庫
  • 展示資料庫狀態
  • 進入資料庫 shell
  • 寫 sql 創建 table、插入數據、查詢數據 - 這部分後面用 drizzle 來完成
  • 複製資料庫到另一個區域 locations

使用比較簡單,後續業務中連接資料庫有 sdk 和 http 連接兩種方案

  • 獲取 db 的 url
  • 獲取 jwt 的 token
  • 安裝 @libsql/client
  • 基於 createClient 創建 client
  • client 執行 sql

基於 drizzle ORM#

關聯:

  • [[Drizzle ORM 文檔速通]]
  • [[01 - 了解探索 sqlite 和 Cloudflare D1]]
  • [[node + sqlite]]
  • [[better-sqlite3]]

drizzle 和 sqlite 有一流的支持,連 AstroDB 都是基於 drizzle 封裝的。

使用方式

  • 安裝 drizzle-orm@libsql/client 依賴
  • 安裝 drizzle-kit 開發依賴,用來生成 sql、遷移 sql 開發間操作
    • drizzle-kit generate 生成
    • drizzle-kit migrate 遷移
    • drizzle-kit studio 頁面查看
  • 獲取 db 的 uri 和 jwt token
  • 創建 db/schema.ts 導出 table 定義
  • 配置 drizzle.config.ts 設置 schema 位置、驅動、連接參數
  • 使用 libsql 創建 client 實例,使用 drizzle 包裝,用吧
  • 修改了 schema 要 generate 生成 sql、通過 migrate 遷移資料庫
  • 使用 studio 的方式查看數據

看文檔額外提到,可以用 sentry 來獲取 sql 慢查詢、sql 錯誤

基於 http 方式#

libsql 遠程協議

  • 獲取 db 的 url 和 token
  • 基於 http 的 url 補齊 /v2/pipeline
  • 準備 json 的 payload 參數,execute 和 close
  • 使用 post 發送,查詢結果
  • 發送過程中提到了參數索引和參數命名

為什麼要 close ?不 close 的話 10s 內根據 ctx 還能續上。

這種方式是基於 http 的,屬於獨有的連接方案,可以輕鬆在任何場合連接,有點意思。

關鍵詞解釋#

  • sqlite 是 db 本身
  • turso 是整套方案的封裝

docker 自托管#

通過下面可以實現免鑒權方案攔截托管的 libsql-server,但是帶 jwt 鑒權的還得再看看。

文檔地址
https://github.com/tursodatabase/libsql/blob/main/docs/DOCKER.md

在 m1 芯片的蘋果上使用這個

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

# token
turso db tokens create my-db

參考 https://www.json.cn/jwt/
https://jwt.io/

// header
{
  "alg": "EdDSA",
  "typ": "JWT"
}

// payload
{
  "iat": 1726756735,
  "id": "81220406-4854-4d4b-817e-61f4a092cdc4"
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。