更快、更灵活、更好的开发者体验:这就是我们从 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 从未要求您安装额外的包(例如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 generator 上设置 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 宣言,详细介绍了我们 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 时事通讯