更快、更灵活、更好的开发者体验:这是我们从 Rust 转向 TypeScript 的目的!但这不仅仅是从一种语言重写到另一种语言,它还是 Prisma ORM 架构的根本性改进——你现在就可以尝试!
TL;DR:无 Rust ORM 已可用于生产
Prisma ORM 的核心引擎已从基于 Rust 的查询引擎大幅转向更精简的TypeScript/WASM 核心(查询编译器)。这种新架构现已可用于生产 (v6.16+),从根本上改善了您的开发者体验 (DX) 和应用程序性能。
- 无二进制开销:消除了对原生 Rust 二进制文件的依赖,极大地简化了部署并降低了潜在的复杂性问题。
- 性能:查询速度最高提升 3.4 倍(通过消除跨语言序列化),捆绑包大小减少 90%(从约 14MB 减至 1.6 MB)。
- 更好地支持不同运行时:更好地支持 Cloudflare Workers、Deno、Bun、Vercel Edge 等部署环境和运行时。
要立即实现这些优势,请参阅新无 Rust ORM 的官方使用指南。您也可以在我们Prisma ORM:Rust 到 TypeScript 完整迁移之旅的博客系列中跟踪整个开发和发布历史。
Prisma ORM 简史
让我们快速回顾一下,了解 Prisma 架构及其基于 Rust 的查询引擎的起源。
从 GraphQL 到数据库
如果你是 Prisma 社区的新成员,这可能会让你感到惊讶:Prisma ORM 脱胎于一个名为 Graphcool 的 GraphQL 后端即服务。经过多次迭代,我们剥离了抽象层,从 API 层向下移到数据库层,最终于 2020 年发布了 Prisma ORM。

为何当初选择 Rust 查询引擎?
Prisma ORM 于 2020 年构思时,我们立志为多种语言构建 Prisma ORM。因此,我们选择了一种能够支持这一努力的架构,并将 Prisma ORM 的查询层分为两部分:
- 一个查询引擎:负责生成 SQL 查询和管理数据库连接的繁重工作。
- 一个轻量级的语言特定客户端:让开发者轻松地向数据库发送查询。
更快、更灵活、更好的开发者体验
五年后,开发者生态系统发生了很大变化:TypeScript 正在成为 Web 的主导语言,开发者倾向于无服务器部署。我们还对 Rust 引擎方法造成的摩擦点获得了宝贵的见解,最显著的是与现代运行时的兼容性问题、部署复杂性(例如,由于引擎二进制文件大小或需要针对特定目标进行编译)以及跨语言边界的额外序列化步骤导致的性能开销。
有了这些知识,我们开始着手从架构中移除 Rust,以创建一个更快、更灵活、并提供整体更好开发者体验的 Prisma ORM 版本!如果你想了解更多关于迁移过程的信息,请查看我们之前关于此主题的两篇文章:
Prisma ORM v6.7.0:无 Rust 引擎的新架构(抢先体验)
继我们之前的更新之后,我们很高兴在本周的 v6.7.0 版本中发布了针对 PostgreSQL 和 SQLite 的全新无 Rust架构,现已提供抢先体验。请试用并告诉我们你的想法!
与原生 JavaScript 驱动包一起使用
基于 Rust 的查询引擎过去负责通过内置数据库驱动程序(也是用 Rust 编写的)管理数据库连接。这就是为什么,与其他 ORM 不同,Prisma ORM 从不需要你安装额外的包(如 pg 或 better-sqlite3)。
通过移除 Rust,Prisma ORM 将不再拥有内置驱动程序,现在需要依赖原生 JS 驱动程序才能使用。这通过 驱动适配器 实现,驱动适配器自 v5.4.0 以来一直是 Prisma ORM 的一部分,并通过 driverAdapters 预览功能标志提供。
新 Prisma ORM 架构入门
要开始使用新版无 Rust Prisma ORM,你需要将 prisma 和 @prisma/client 版本更新到 6.7.0,然后在 Prisma Client 生成器上设置 queryCompiler 和 driverAdapters 功能标志:
接下来,你需要运行以下命令重新生成 Prisma Client:
根据你是使用 PostgreSQL 还是 SQLite,你需要为 pg 或 better-sqlite3 安装驱动适配器:
安装后,你可以按如下方式实例化 PrismaClient 实例:
此时,你可以像往常一样使用 PrismaClient 实例——与数据库交互的方式没有其他变化。如果你在 monorepos、Bun 和 Deno 等较新的运行时中使用 Prisma ORM,或者将应用程序部署到无服务器和边缘环境,此切换将特别有用。
无 Rust 引擎的 Prisma ORM 性能提升
新架构不仅更灵活,而且提供更友好的开发者体验。在查询性能方面,它也显示出更好的数据。这并不是因为 Rust 本身很慢(恰恰相反),而是因为当查询和数据跨越语言边界时,某些查询会遇到显著的序列化开销。新架构节省了这种开销,使查询执行更精简、更快。
我们已经开始比较旧架构和新架构的性能,发现几乎所有查询都变得显著更快,有时甚至快一倍或更多!
有关详细信息,你可以查看我们最近的文章,其中我们详细介绍了这些测量结果。
Prisma ORM 的下一步计划?
Prisma ORM 目前正在经历重大变革。几个月前,我们发布了ORM 宣言,其中详细介绍了我们的开源治理流程的变更。自那时起,我们一直努力使 Prisma ORM 更简单、更健壮、更灵活,其功能包括新的 prisma-client 生成器、基于 TypeScript 的配置文件(名为 prisma.config.ts),以及移除魔法行为,例如将 Prisma Client 生成到 node_modules 中。请查看我们的路线图以了解下一步计划!
试用无 Rust 的 Prisma ORM
总而言之,新版无 Rust 的 Prisma ORM 架构:
- 通过消除额外二进制文件的需求,使 Prisma ORM 更轻量。
- 通过节省跨语言边界的序列化开销,使 Prisma ORM 更快。
- 提供更好的开发者体验,因为部署更简单(不再需要“二进制目标”)。
快来试试吧,并在 X 和我们的 Discord 上告诉我们你的想法!
试用无 Rust 引擎的 Prisma ORM
常见问题 (FAQ)
Prisma ORM 的无 Rust 二进制版本自Prisma ORM 6.16 版本起已可用于生产,以下是我们用户的一些常见问题:
没有 Rust 引擎,Prisma 的包大小缩小了多少,为什么这有助于冷启动?
当 Prisma 移除 Rust 二进制查询引擎后,包大小从大约14 MB(gzip 压缩后 7 MB)降至大约1.6 MB(gzip 压缩后 600 KB),减少了85% 到 90%。
这个更小的包在无服务器和边缘环境中加载更快,例如 AWS Lambda、Cloudflare Workers 和 Vercel Edge Functions。
由于需要加载和初始化的代码更少,冷启动变得更快,内存使用也减少了。
与旧的 Rust 引擎相比,使用无 Rust 二进制的 Prisma ORM 查询速度有多快?
在内部基准测试中,无 Rust 二进制的 Prisma ORM,也称为查询编译器,带来了显著的性能提升:
- 包含 25,000 条记录的
findMany从185 毫秒提升到 55 毫秒(约快 3.4 倍) - take = 2000 的
findMany从6.6 毫秒提升到 3.1 毫秒(约快 2.1 倍) - 复杂连接从207 毫秒提升到 130 毫秒(约快 1.6 倍)
您可以在Rust 到 TypeScript 性能更新博客中阅读更多信息。
这些改进在大型或复杂查询上最为显著。
无 Rust 二进制的 Prisma ORM 能在 Cloudflare、Deno 和 Bun 等运行时中工作吗?
是的。由于 Prisma 的新引擎完全在 TypeScript 和 WebAssembly 中运行,它不再依赖于原生二进制文件。
您现在可以在支持 JavaScript 或 WASM 的环境中(例如 Cloudflare Workers、Bun 和 Deno)使用 Prisma。
要启用它,请使用新的 prisma-client 生成器并为您的数据库配置正确的驱动适配器,例如 PostgreSQL 的 @prisma/adapter-pg。
有关设置说明,请参阅Prisma 客户端生成器文档。
如果 Rust 已经很快了,为什么切换到 TypeScript 和 WebAssembly 会让 Prisma 更快?
Rust 是一种非常快的系统语言,但在旧的架构中,Prisma 必须在 Rust 和 JavaScript 之间序列化和反序列化数据。
这种跨语言通信增加了开销,特别是对于大型查询。
新的查询编译器在 TypeScript 和 WebAssembly 中运行,这消除了对序列化步骤的需求,从而实现了更快的查询执行。
您可以在从 Rust 到 TypeScript:Prisma ORM 的新篇章中了解更多关于这一变化的信息。
使用无 Rust 二进制的 Prisma ORM 需要进行哪些更改?
要迁移到新版本,请执行以下操作:
- 使用新的
prisma-client生成器,并在您的schema.prisma文件中设置engineType = "client"。 - 删除
binaryTargets配置(不再需要)。 - 安装适用于您数据库的相应驱动程序适配器,例如 PostgreSQL 的
@prisma/adapter-pg或 SQLite 的@prisma/adapter-sqlite。 - 运行
npx prisma generate以重新生成您的 Prisma Client。
您可以在无 Rust 二进制 ORM 的 Prisma 文档中查看完整的使用指南。
如果需要,我可以切换回 Rust 引擎吗?
是的。如果您遇到兼容性问题,可以通过使用 6.16.0 之前的旧 Prisma ORM 版本来暂时恢复到旧版 Rust 引擎。
但是,无 Rust 二进制引擎现在是默认设置,并且建议所有新项目都使用它。
迁移步骤和回退指南可在无 Rust 的 Prisma ORM 生产发布博客中找到。
不要错过下一篇文章!
订阅 Prisma 新闻通讯