辛宝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"
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。