2025 年 4 月 30 日

尝试新的“无 Rust”版本 Prisma ORM(早期访问)

更快、更灵活、更好的开发者体验:这就是我们从 Rust 转向 TypeScript 的好处!但不仅如此,这不仅仅是从一种语言重写到另一种语言,更是 Prisma ORM 架构的根本性改进——您可以立即尝试

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 从未要求您安装额外的包(例如pgbetter-sqlite3)。

通过移除 Rust,Prisma ORM 也将不再包含内置驱动程序,现在需要依赖原生的 JS 驱动程序才能使用。这通过驱动程序适配器实现,该适配器自v5.4.0 起已成为 Prisma ORM 的一部分,并通过 driverAdapters 预览功能标志提供。

开始使用新的 Prisma ORM 架构

要开始使用新的“无 Rust”版本的 Prisma ORM,您需要将您的 prisma@prisma/client 版本更新到 6.7.0,然后在您的 Prisma Client generator 上设置 queryCompilerdriverAdapters 功能标志

接下来,您需要运行以下命令重新生成 Prisma Client

根据您使用的是 PostgreSQL 还是 SQLite,您需要安装 pgbetter-sqlite3 的驱动程序适配器

安装完成后,您可以按如下方式实例化您的 PrismaClient 实例

此时,您可以像往常一样使用您的 PrismaClient 实例——与其数据库交互的方式没有其他变化。如果您在 monorepos、Bun 和 Deno 等较新的运行时中使用 Prisma ORM,或者将您的应用程序部署到无服务器和边缘环境,此切换将特别有用。

无 Rust 引擎的 Prisma ORM 性能提升

新架构不仅更灵活,而且提供了更友好的开发者体验。在查询性能方面,它也表现出更好的数据。这并非因为 Rust 本身速度慢(恰恰相反),而是因为当查询和数据跨越语言边界时,某些查询会产生显著的序列化开销。新架构消除了这种开销,使得查询执行更精简、更快速。

我们已经开始比较新旧架构的性能,发现几乎所有查询都显著变快了,有时甚至快一倍或更多!

有关详细信息,您可以查看我们最近的文章,其中详细介绍了这些性能测量结果。

Prisma ORM 的下一步是什么?

Prisma ORM 目前正在进行重大变革。几个月前,我们发布了ORM 宣言,详细介绍了我们 OSS 治理流程的变更。从那时起,我们一直在努力使 Prisma ORM 更简单、更健壮、更灵活,引入了诸如新的prisma-client generator、基于 TypeScript 的配置文件(称为 prisma.config.ts)以及移除一些“魔术”行为(例如将 Prisma Client 生成到 node_modules 中)等功能。查看我们的路线图,了解后续计划!

试用无 Rust 的 Prisma ORM

总之,新的无 Rust 的 Prisma ORM 架构

  • 通过消除对额外二进制文件的需求,使 Prisma ORM 更加轻量
  • 通过减少跨语言边界的序列化开销,使 Prisma ORM 更快
  • 提供了更好的开发者体验,因为部署更简单(不再需要“二进制目标”)

试试看,并在X 和我们的Discord 上告诉我们您的想法!


试用无 Rust 引擎的 Prisma ORM

不要错过下一篇文章!

订阅 Prisma 时事通讯