2024年3月12日

Prisma ORM 对边缘函数(Edge Functions)的支持现已进入预览阶段

我们很高兴地宣布,对边缘函数的支持已进入预览阶段!您现在可以通过Vercel边缘函数、Vercel边缘中间件、Cloudflare Workers和Cloudflare Pages,使用Prisma ORM访问您的数据库。立即试用

Prisma ORM Support for Edge Functions (Preview)

什么是边缘函数?

边缘函数是一种轻量级的无服务器计算形式,分布在全球各地。它们允许您将应用程序部署并运行在尽可能靠近最终用户的位置。

边缘函数可以使您的应用更快

得益于边缘函数的地理分布式特性,用户与数据中心之间的距离得以缩短。这降低了请求延迟并改善了响应时间,使边缘函数成为提升应用性能并显著改善用户体验的绝佳方法。

边缘函数中的技术限制

Vercel边缘函数和Cloudflare Workers不使用标准的Node.js运行时。相反,它们是在V8隔离环境中运行代码。因此,这些边缘函数只能访问标准Node.js API的一个小子集,并且计算资源(CPU和内存)也受到限制。

特别是,无法自由打开TCP连接的限制使得从边缘函数与传统数据库通信变得困难。虽然Cloudflare引入了一个connect() API,实现了有限的TCP连接,但这仍然只能通过与该API兼容的特定数据库驱动程序进行数据库访问。

注意: 在Node.js生态系统中,与Cloudflare Workers兼容的最受欢迎的传统数据库驱动程序是用于PostgreSQL的node-postgres。然而,目前也正在进行工作,以使node-mysql2驱动程序中的MySQL兼容Cloudflare Workers。

现代数据库提供商,例如NeonPlanetScale,通过发布通过HTTP与数据库通信的无服务器驱动程序来规避这一限制。

使用Prisma ORM在边缘函数中访问数据库 🎉

尽管在早期版本中可以在边缘函数中使用Prisma ORM,但这始终需要使用Prisma Accelerate作为边缘函数和数据库之间的代理。

由于上述技术限制,无法“直接”将带有Prisma ORM的应用程序部署到边缘。

  • 数据库访问仅适用于特定驱动程序(无论是无服务器驱动程序还是与Cloudflare的connect()兼容的驱动程序)。这里的问题是Prisma ORM过去只在其查询引擎中内置驱动程序,因此无法使用兼容的Node.js驱动程序。
  • 上传到边缘函数的应用程序包大小限制使得使用Prisma ORM变得不可能,因为其查询引擎过大,超出了大小限制。
  • 边缘函数只允许访问有限的Node.js API。然而,Prisma Client需要其中一些API才能工作,因此无法访问这些API需要Prisma Client绕过一些限制。

我们很高兴地宣布,v5.11.0 版本发布
解除了这些限制,并支持在边缘函数中运行Prisma ORM(预览版)🎉

得益于最近引入的驱动程序适配器预览功能,开发者现在可以将Prisma ORM与他们喜爱的Node.js生态系统中的数据库驱动程序一起使用!

此外,我们已经能够大幅减小Prisma ORM查询引擎的大小,使其现在可以适应边缘函数有限的运行时环境。

如何在边缘函数中使用Prisma ORM

🔬 如果您有兴趣查看实际示例,我们整理了一个小型的GitHub仓库,演示如何使用Prisma ORM和Vercel边缘函数访问您的数据库。

请按照以下步骤学习如何在Cloudflare Worker中使用PlanetScale数据库来启动并运行Prisma ORM(或查看我们的文档以使用不同的边缘部署和数据库提供商组合)。

0. 前提条件

在执行以下步骤之前,请确保您已具备

  • 您的机器上已安装Node.js
  • 一个Cloudflare账户
  • 一个正在运行的PlanetScale实例及其可用的连接字符串

1. 设置您的应用程序

使用create-cloudflare-cli初始化您的项目,并按照CLI向导中的步骤操作,选择提示的默认选项

2. 设置Prisma

进入新目录并安装Prisma CLI

接下来,使用以下命令在您的项目中初始化Prisma

上述命令

  • prisma/schema.prisma中创建了Prisma schema文件
  • 创建了一个.env文件来存储环境变量

.env文件包含一个占位符DATABASE_URL环境变量。

使用连接到您的PlanetScale数据库的实际连接字符串更新该值。它可能看起来像这样

注意: 上述连接字符串使用了数据库的用户名密码名称的占位符。请务必将它们替换为您自己数据库的值。

更新您的Prisma schema如下所示

上述Prisma schema

  • 启用了driverAdapters预览功能标志
  • 定义了一个Log模型和Level枚举

要将您的数据模型映射到数据库,您需要使用prisma db push CLI 命令

这在您的数据库中创建了一个新的Log表,您现在可以在PlanetScale仪表板中查看。

3. 编写Cloudflare Worker函数

在您的wrangler.toml文件中,添加一个[vars]键和您的数据库连接字符串(像之前一样,用您自己的PlanetScale实例的值替换USERNAMEPASSWORDDATABASE的占位符)

注意: 由于这是一个演示应用,我们将纯连接字符串添加到wrangler.toml中。然而,由于此文件通常会被提交到版本控制,您在生产环境中绝不应这样做,因为它会公开您的数据库连接。相反,请使用Cloudflare的secrets配置

接下来,安装PlanetScale无服务器数据库驱动程序及其驱动程序适配器

使用以下代码更新src/index.ts文件中的示例Cloudflare Worker代码片段

启动应用程序

从终端输出中,您现在可以打开指向localhost的URL,或按下b键打开浏览器并调用Worker函数。

如果一切顺利,您将看到类似于以下的输出

4. 发布到Cloudflare Workers

您现在可以通过运行以下命令部署应用程序

此命令会将您的边缘函数部署到Cloudflare,并输出可以访问它的URL。

试用并分享您的反馈

我们很想听听您的想法!请尝试使用VercelCloudflare进行边缘部署的新支持,并通过TwitterDiscord与我们分享您的反馈🚀

如果您遇到任何问题,可以在此处创建错误报告。

不要错过下一篇文章!

订阅Prisma新闻通讯

© . All rights reserved.