xChar
·2 months ago

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"
}
Loading comments...