什么是 Turso,它与 SQLite 有何不同?
SQLite 是一个自包含、基于文件的开源数据库,以其可移植性、可靠性和性能而闻名,即使在内存较低的环境中也是如此。由于其速度,它也非常适合小型 Web 应用程序。
然而,扩展 SQLite 会带来挑战
- 手动备份
- 缺乏开箱即用的复制功能
- 在无服务器环境中持久化数据存在困难
- 在多服务器设置中托管存在困难
其中一些挑战可以通过 LiteFS 等工具解决,该工具为 SQLite 提供复制和数据库备份。
另一方面,Turso 通过创建 libSQL 解决了上述挑战 — libSQL 是 SQLite 的一个分支,它添加了 SQLite 尚未支持的功能。libSQL 允许你分发和复制 SQLite,通过 HTTP 连接,执行异步操作,并将 SQLite 作为主要数据库的复制品或作为其他程序的一部分嵌入。
Prisma + Turso = 🚀
虽然 Prisma 自 2019年首次发布 以来一直支持 SQLite,但 libSQL 与 SQLite 不同。例如,libSQL 使用 HTTP 连接到数据库,并使用远程文件而不是本地文件,这使得 Prisma 和 Turso 之前不兼容。
今天,我们很高兴地宣布,Prisma 对 Turso 的支持现已进入早期访问阶段!
Prisma 和 Turso 入门
要开始在项目中使用 Turso,必须首先启用 driverAdapters
预览功能标志。这将允许你使用 Turso 的驱动适配器查询数据库。
driverAdapters
功能标志是我们正在进行的驱动适配器计划的一部分,旨在让你使用其他数据库驱动程序连接到数据库。示例驱动适配器包括 PlanetScale、Neon 和 libSQL。我们将很快分享更多详情!如果你还没有,请填写 此调查,并留下你的电子邮件地址以获取更新。
先决条件
你需要安装以下工具
如果你没有现有的使用 SQLite 的项目,可以使用 try-prisma
设置项目。导航到你的工作目录并复制以下命令来设置项目
导航到项目并在你喜欢的代码编辑器中打开它
在 Turso 上创建数据库
首先,在 Turso 上创建一个你的应用程序将使用的数据库。这一步是创建配置 Turso 数据库客户端所需凭据的必要步骤。
-
要创建数据库,请在终端中运行以下命令
Turso 还将在离你位置最近的区域创建一个数据库。
-
创建一个允许你连接到数据库的身份验证令牌
-
接下来,显示连接字符串详细信息以连接到你的数据库
记下身份验证令牌和连接字符串,它们将在下一步中用于连接到你的数据库。
使用 Prisma 连接到 Turso
开始使用 Turso
-
在你的 Prisma schema 中启用
driverAdapters
预览功能标志 -
创建或更新你的
.env
文件,将 Turso 数据库创建步骤中的值填入环境变量 -
创建初始迁移
-
将迁移应用到你的 Turso 数据库
-
安装最新版本的 Prisma Client
-
安装 libSQL 数据库客户端和 Prisma Client 的驱动适配器
-
使用以下代码段更新你的 Prisma Client 实例
就是这样!
现在你可以开始使用 Prisma Client 查询你的 Turso 数据库了。
如果你克隆了 typescript/script
示例,可以运行 npm run dev
来插入和查询数据,以确认你的更改已成功。
接下来做什么
上述设置使用 单个 远程数据库。你可以通过设置数据库副本 更进一步。当你创建副本时,Turso 会自动为读查询选择离你的应用程序最近的副本。无需额外的逻辑来定义如何处理读查询的路由。写查询将被转发到主数据库。
试试看并分享你的反馈!如果你发现缺少什么或遇到错误,我们鼓励你创建问题。
超越远程 SQLite:嵌入式副本
虽然 Turso 允许你在全球复制 SQLite,但如果能消除应用程序到远程副本的额外网络跳转呢?如果... 你能将数据库移动到你的应用程序内部呢?
借助 Turso 新近 宣布的嵌入式副本,你可以将主远程数据库的副本放置在应用程序内部,就像嵌入式/本地 SQLite 数据库工作一样。你可以使用 Prisma 对 Turso 的新支持在你的应用程序中尝试此功能。

嵌入式副本如何工作?
当你的应用程序最初建立与数据库的连接时,远程主数据库将满足查询

然后 Turso 将 (1) 在你的应用程序内部创建一个嵌入式副本,并 (2) 将数据从主数据库复制到副本,使其在本地可用

嵌入式副本将满足后续的读查询。libSQL 客户端提供了一个 sync()
方法,你可以调用它来确保嵌入式副本的数据保持最新。

有了嵌入式副本,这种设置可以保证你的应用程序快速运行,因为数据将在本地随时可用。
类似于你可能熟悉的读副本设置,写操作将被转发到远程主数据库执行,然后再传播到所有嵌入式副本。

- 写操作的传播将被转发到数据库。
- 数据库将步骤1中的更新响应给服务器。
- 写操作被传播到数据库副本。
嵌入式副本对你的查询的影响
为了展示嵌入式副本的速度,我们创建了两个使用相同主数据库的示例应用程序 - 其中一个使用了嵌入式副本。
对于此示例测试,将使用以下查询
以下是应用程序启动时相同查询的耗时截图
未使用嵌入式副本
时间:154.390 ms

使用嵌入式副本
时间:7.883 ms

查询响应时间从 154.390 ms 显著下降到 7.883 ms。
如果你想自己尝试一下,可以在 GitHub 上找到这两个示例应用程序
你可以用嵌入式副本做什么?
嵌入式副本是 Turso 相对较新的功能,但你可以使用它们的一些用例包括
- 提高你的 API 读取性能:嵌入式副本可以通过与 Prisma Client 搭配使用嵌入式数据库来消除连接到远程数据库服务器的网络成本。
- 替代你的缓存服务:嵌入式副本可以与 Prisma Client 扩展 配对用于查询响应,使你的应用程序更快,因为数据始终保持最新。
看看你会为这种新的数据库副本方法提出什么其他用例,这将非常有趣。
亲自试一试!
我们迫不及待地想看看你将用 Turso 和 Prisma 构建什么。我们鼓励你尝试一下并 告诉我们你的想法。
我们还在努力支持其他无服务器数据库驱动程序和边缘函数部署。请填写 这个简短的调查 并留下你的电子邮件地址以获取更新。
请务必在 Twitter 或 Discord 上分享你构建的内容。🙌
不要错过下一篇文章!
订阅 Prisma 新闻通讯