Query Compiler 项目通过将传统的 Rust 引擎替换为基于 WASM 模块和 TypeScript 构建的更精简的解决方案,升级了 Prisma ORM。这一改变提升了查询性能,将打包体积减小了 85-90%,同时还改善了与各种 Web 框架和打包工具的兼容性。随着 Prisma ORM 迈向版本 7,开发者可以期待更流畅、更高效的体验。
突破性能瓶颈
快速回顾一下,Query Compiler 项目旨在用精简的 WASM 模块和辅助 TypeScript 代码来取代用 Rust 编写的 Prisma 查询引擎。通过此举,我们期望实现更快的查询速度和更小的占用空间,现在我们已经运行了基准测试来证明这一点。
自上次更新以来,我们的团队一直全身心投入到这个项目中。随着 Prisma ORM 6.4 的发布,我们达到了一个重要的里程碑:Query Compiler 的工作原型。这个 alpha 版本包含了运行针对现有 Prisma Client 实现的全面基准测试所需的 API。您可以在我们的ORM 基准测试仓库中查看代码和完整的基准测试结果。
Prisma Client 的新架构
带有 Query Compiler 的 Prisma Client 架构建立在我们当前 Driver Adapters 的架构之上。在当前的 Driver Adapters 实现中,Prisma Client 查询从 TypeScript 发送,经过查询引擎、驱动适配器和数据库驱动,最终到达您的数据库。
有了 Query Compiler,Prisma Client 查询会首先被翻译成内部查询计划,然后传回客户端,通过相同的驱动适配器和数据库驱动设置发送到您的数据库。如果您今天正在使用 driverAdapters
预览功能,新的实现方式将非常相似。
这一转变不仅仅是现代化;它是为了让 Prisma ORM 更快、更简单。我们相信新架构将显著减少“意外”,让开发者无需担心兼容性问题,即可将 Prisma ORM 集成到他们的技术栈中。
新架构的主要优势
更快的性能
这个项目背后的主要驱动力是,虽然 Rust 速度很快,但 Rust 和 TypeScript 之间数据序列化的成本非常高。这个成本抵消了我们将查询引擎放在 Rust 中的任何好处,我们已经看到新架构带来了显著的改进。
不再需要额外二进制文件
通过消除对 Rust 二进制文件的依赖,我们解决了在开发流程中管理额外文件所导致的一整类问题。从严格网络无法安装二进制文件的简单问题,到确保生产和开发环境拥有正确文件的复杂问题,所有这些问题在 Query Compiler 项目中都不复存在。
此外,移除二进制文件意味着只要您的环境可以运行 JavaScript,就能运行 Prisma ORM。我们预计 AWS Lambda 或 Cloudflare Workers 等环境中的主要痛点将得到解决。您的 Prisma Client 现在将自然地融入您的应用程序技术栈。
显著减小的打包体积
我们的初步测试表明,基于 Rust 的 Prisma 查询引擎大约为 14 MB(gzip 压缩后为 7 MB),而新的 Query Compiler 仅为 1.6 MB(gzip 压缩后为 600 KB),平均尺寸减少了 85-90%。更少的磁盘空间意味着您的部署更快,并且您的应用程序可以更容易地部署到更多平台。
基准测试结果
这些数字不言自明。与现有的 Rust 查询引擎相比,新的 Query Compiler (QC) 架构带来的性能提升会随着检索数据量的增加而逐渐变得更好。它恰恰在最关键的时候更快。
根据我们的测试,我们发现对于大量数据,Query Compiler 始终比基于 Rust 的引擎更快,在某些情况下甚至快三到四倍。当只返回少量数据时,两种实现的效果基本相同。Query Compiler 为现有 Prisma ORM 用户带来了巨大好处,并且没有负面影响。
然而,这些只是最初的基准测试示例。我们计划扩展这些基准测试,并在受限环境中(如 AWS Lambda 或 Cloudflare Workers)运行它们,以便我们对数据充满信心。此外,我们将继续改进我们的实现,以提高效率和带来更多好处。
拥抱未来:Prisma ORM 7 及更高版本
我们对这对 Prisma ORM 用户意味着什么感到非常兴奋。突破性的性能和减小的打包体积不仅使您的应用程序更快、更高效,而且还使我们能够更快地创新。在接下来的几个月里,我们将从一个预览版本开始,邀请您试用这些改进。此后不久,Prisma ORM 7 将全面采用 Query Compiler,标志着 Prisma 与数据库通信方式迈向新纪元。
一如既往,我们关注社区,并期待听到您的想法!
- 关注最新动态,并在 GitHub 上加入讨论
- 在我们的开发者 AMA 中,在 Discord 上向我们提出紧急问题
- 甚至可以 自己运行基准测试!
不要错过下一篇文章!
订阅 Prisma 新闻邮件