基础使用#
参考 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"
}