Page 1 of 1

新架构的主要优势

Posted: Wed Apr 23, 2025 5:50 am
by liza89
该项目背后的主要驱动力在于,尽管 Rust 速度很快,但在 Rust 和 TypeScript 之间序列化数据的成本却非常高昂。这种成本抵消了使用 Rust 查询引擎所带来的任何好处,而新架构已经显著提升了我们的性能。

不再需要额外的二进制文件
通过移除对 Rust 二进制文件的依赖,我们消除了开发流程中因管理额外文件而导致的一系列问题。从严格的网络无法安装二进制文件的简单问题,到确保生产和开发环境拥有正确文件的复杂问题,这些问题在 Query Compiler 项目中均不存在。

最重要的是,移除二进制文件意味着,只要您的环境能够运行 JavaScript,它就能运行 Prisma ORM。我们期待看到 AWS Lambda 或 Cloudflare Workers 等环境中最大的痛点得到解决。您的 Prisma 客户端现在将自然地融入您的应用程序堆栈。

显著减少捆绑包大小
我们的初步测试表明,基于 Rust 的 Prisma 查询引擎大约占用 14 MB(gzip 压缩后 7 MB),而新的查询编译器仅占用 1.6 MB(gzip 压缩后 600 KB),平均大小减少了 85-90%。更少的磁盘空间意味着您的部署速度更快,并且可以轻松地将应用部署到更多平台。

基准测试结果
数字说明了一切。与现有的 Rust 查询引擎相比,新的 老挝电话号码列表 查询编译器 (QC) 架构带来了性能提升,并且随着检索数据量的增加而不断提升。在关键时刻,它的速度更快:

基准 质量控制 锈 结论
findMany(25,000 条记录) 55.0 毫秒 185.0 毫秒 QC 速度提高 3.4 倍
findMany,取 2000 3.1毫秒 6.6 毫秒 QC 速度提高 2.1 倍
使用 where 查找多个并取 2000 10.8 毫秒 13.3 毫秒 QC 速度提高 1.2 倍
使用 orderBy 查找多个元素并取 50 5.8 毫秒 7.2 毫秒 QC 速度提高 1.2 倍
findMany 与 where、对多连接,并取 2000 72.3 毫秒 92.3 毫秒 QC 速度提高 1.3 倍
使用 where 进行 findMany,对多 → 对一连接,并取 2000 130.0 毫秒 207.0 毫秒 QC 速度提高 1.6 倍
findMany 具有多对多关系过滤器,取 100 333.0 毫秒 330.0 毫秒 Rust 速度提高 1.01 倍
使用深度关系过滤器 findMany,取 100 1.5毫秒 2.4 毫秒 QC 速度提高 1.6 倍
使用一对一过滤器进行 findMany,取 100 1.3毫秒 1.4毫秒 QC 速度提高 1.1 倍
findMany 具有一对多 → 一对多 → 一对一关系过滤器,取 100 300.0 毫秒 323.0 毫秒 QC 速度提高 1.1 倍
findUnique 与 take three 或 to-many 连接 23.2 毫秒 23.5毫秒 QC 速度提高 1.01 倍
测试发现,在处理大量数据时,查询编译器始终比基于 Rust 的引擎更快,在某些情况下甚至快三到四倍。当仅返回少量数据时,两种实现的性能实际上相同。查询编译器为现有的 Prisma ORM 用户带来了巨大的优势,且没有任何负面影响。

然而,这些示例只是第一批基准测试。我们计划扩展这些基准测试,并在 AWS Lambda 或 Cloudflare Workers 等受限环境中运行它们,以便我们对结果更有信心。此外,我们将继续改进我们的实施方案,以提高效率和效益。

拥抱未来:Prisma ORM 7 及更高版本
我们非常期待这对 Prisma ORM 用户的意义。突破性的性能和更小的软件包大小不仅能让您的应用运行更快、更高效,还能让我们更快地进行创新。在接下来的几个月里,我们将从预览版开始,邀请您试用这些改进。此后不久,Prisma ORM 7 将全面支持查询编译器,标志着 Prisma 与数据库通信方式迈入新时代。

与往常一样,我们的重点是我们的社区,我们很乐意听到您的想法!

关注最新更新并加入 GitHub 上的讨论
在Discord 上通过我们的开发者 AMA向我们提出热门问题
甚至可以自己运行基准测试!