2023 年 9 月 28 日

边缘上的 SQLite:Prisma 对 Turso 的支持已进入抢先体验阶段

Turso 是一个基于 libSQL(一个开源且开放贡献的 SQLite 分支)的边缘托管分布式数据库,它可以让数据更接近您的应用程序,最大程度地减少查询延迟。

我们很高兴地宣布,Prisma ORM 正在增加对 Turso 的抢先体验支持。让我们深入了解一下!

SQLite on the Edge: Prisma Support for Turso is in Early Access

什么是 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 功能标志是我们正在努力的驱动程序适配器计划的一部分,旨在让您可以使用其他数据库驱动程序连接到数据库。示例驱动程序适配器包括 PlanetScaleNeon 和 libSQL。我们将很快分享更多详细信息!如果您还没有,请填写此调查,并留下您的电子邮件地址以获取更新。

先决条件

您需要安装以下工具:

如果您没有使用 SQLite 的现有项目,可以使用 try-prisma 设置项目。导航到您的工作目录并复制以下命令来设置项目:

导航到项目并在您首选的代码编辑器中打开它

在 Turso 上创建数据库

首先,在 Turso 上创建一个您的应用程序将使用的数据库。此步骤对于创建配置 Turso 数据库客户端所需的凭据是必需的。

  1. 要创建数据库,请在终端中运行以下命令:

    Turso 还将在离您最近的区域创建数据库。

  2. 创建一个身份验证令牌,它将允许您连接到数据库

  3. 接下来,显示连接字符串详细信息以连接到您的数据库

    记下身份验证令牌和连接字符串,它们将在下一步中用于连接到您的数据库。

使用 Prisma 连接到 Turso

开始使用 Turso:

  1. 在您的 Prisma 模式中启用 driverAdapters 预览功能标志

  2. 创建或更新您的 .env 文件,其中包含“在 Turso 上创建数据库”步骤中的环境变量值

  3. 创建初始迁移

  4. 将迁移应用到您的 Turso 数据库

  5. 安装最新版本的 Prisma Client

  6. 安装 libSQL 数据库客户端和 Prisma Client 的驱动程序适配器

  7. 使用以下代码片段更新您的 Prisma Client 实例

就是这样!

现在您可以使用 Prisma Client 开始查询您的 Turso 数据库了。

如果您克隆了 typescript/script 示例,可以运行 npm run dev 来插入和查询数据,以确认您的更改已成功。

接下来的方向

上述设置使用单个远程数据库。您可以通过设置数据库副本来更进一步。当您创建副本时,Turso 会自动为读取查询选择离您的应用程序最近的副本。无需额外的逻辑来定义如何处理读取查询的路由。写入查询将被转发到主数据库。

尝试一下并分享您的反馈!如果您发现缺少某些功能或遇到错误,我们鼓励您创建问题


超越远程 SQLite:嵌入式副本

虽然 Turso 允许您全局复制 SQLite,但如果您能消除应用程序到远程副本的额外网络跳数呢?如果……您可以将数据库移到应用程序内部呢?

借助 Turso 新宣布的嵌入式副本,您可以将主远程数据库的副本内部您的应用程序,类似于嵌入式/本地 SQLite 数据库的工作方式。您可以使用 Prisma 对 Turso 的新支持在应用程序中试用此功能。

A meme gif of a person having their mind blown.

嵌入式副本如何工作?

当您的应用程序最初与数据库建立连接时,远程主数据库将执行查询

然后 Turso 将 (1) 在您的应用程序中创建一个嵌入式副本,并 (2) 将数据从您的主数据库复制到该副本,以便本地可用

嵌入式副本将执行后续的读取查询。libSQL 客户端提供了一个 sync() 方法,您可以调用它以确保嵌入式副本的数据保持新鲜。

通过嵌入式副本,这种设置保证您的应用程序速度快,因为数据将随时在本地可用。

与您可能熟悉的读取副本设置一样,写入操作会转发到主远程数据库并执行,然后再传播到所有嵌入式副本。

  1. 写入操作的传播会转发到数据库。
  2. 数据库向服务器返回来自 1 的更新。
  3. 写入操作传播到数据库副本。

嵌入式副本对您的查询的影响

为了演示嵌入式副本的速度,我们创建了两个使用相同主数据库的示例应用程序——其中一个变体使用嵌入式副本。

对于此示例测试,将使用以下查询

以下是应用程序启动时相同查询的计时截图

没有嵌入式副本

时间:154.390 毫秒

有嵌入式副本

时间:7.883 毫秒

查询响应时间从154.390 毫秒显著下降到7.883 毫秒

如果您想亲自尝试,可以在 GitHub 上找到这两个示例应用程序:

嵌入式副本有什么用?

嵌入式副本是 Turso 的一个相对较新的功能,但您可以将其用于的一些用例包括:

  • 提高 API 的读取性能:嵌入式副本可以通过带有 Prisma Client 的嵌入式数据库消除连接到远程数据库服务器的网络成本。
  • 替代您的缓存服务:嵌入式副本可以与 Prisma Client 扩展配合使用,用于查询响应,使您的应用程序更快,因为数据始终保持新鲜。

看看您将为这种新的数据库副本方法提出哪些其他用例将会很有趣。

亲自尝试一下!

我们迫不及待地想看看您使用 Turso 和 Prisma 会构建出什么。我们鼓励您尝试一下并告诉我们您的想法

我们还在努力支持其他无服务器数据库驱动程序和边缘函数部署。请完成这项简短调查,并留下您的电子邮件地址以获取更新。

请务必在 X/TwitterDiscord 上与我们分享您的作品。🙌

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.