今天,我们发布了 Prisma v6!自上一个主要版本以来,我们一直在努力工作,整合用户反馈,让 Prisma ORM 更快、更灵活,并添加了诸如类型安全的原始 SQL 查询等令人惊叹的功能。
Prisma v6:您需要了解什么
我们很高兴地宣布,Prisma ORM 又发布了一个主要版本。我们想借此机会回顾一下自 Prisma v5 以来发生的一切。
如果您正在使用 Prisma ORM 并希望升级到 v6,请查看升级指南。
升级到 v6
性能:JOINs 和更高效的查询
在 Prisma ORM 的开发过程中,我们遵循了“使其工作,使其正确,使其快速”的方法。自 2021 年首次发布以来,我们持续投入以提高查询性能,并自上一个主要版本以来,我们很自豪地宣布查询速度得到了显著提升。
选择最佳的 JOIN 策略
原则上,当您需要从通过外键关联的多个表中查询数据时,有两种不同的方法
- 数据库级别:使用 SQL
JOIN
关键字向数据库发送单个查询,并让数据直接由数据库进行连接。 - 应用级别:向数据库发送多个针对单个表的查询,并在您的应用程序中自行连接数据。
根据您的使用场景、数据库 Schema 以及其他几个因素,一种策略可能比另一种更适合。直到 Prisma ORM v5.7.0,Prisma ORM 总是使用应用级别的 JOIN 策略。
然而,随着 v5.7.0 版本的发布,我们现在允许您为您的使用场景选择最佳的 JOIN 策略,确保您始终能获得最佳的查询性能。要选择连接策略,您可以在关联查询中使用 relationLoadStrategy
选项,例如:
如果您想了解这两种方法在底层如何工作以及何时选择哪种 JOIN 策略的更多信息,请查看这篇博客文章:Prisma ORM 现在允许您选择最佳的连接策略(预览版)。
嵌套创建操作的性能改进
使用 Prisma ORM,您可以在嵌套查询中创建多个新记录,例如:
在 v5.11.0 之前的版本中,Prisma ORM 会将此转换为多个 SQL INSERT
查询,每个查询都需要一次到数据库的往返。自此版本起,这些嵌套的 create
查询得到优化,INSERT
查询会通过一次往返以批量方式发送到数据库。这些优化适用于一对多和多对多的关联关系。
自 v5 以来,几乎每个版本都有更快的查询
如果您查看 GitHub 上的 Prisma ORM 发布记录,您会发现几乎每个版本都带来了某种性能改进。
我们致力于持续投入查询性能,以确保您的查询尽可能快速 💚 顺便说一句,如果您好奇 Prisma ORM 在性能方面与其他 TypeScript ORM 的比较,请查看我们的TypeScript ORM 性能基准测试。
灵活性:Node.js 驱动程序、Edge 支持、多个 Schema 文件以及更多
在过去一年中,我们不仅提高了性能,还大大提升了 Prisma ORM 的灵活性。自 Prisma v5 以来,我们使得在新的环境(例如 Cloudflare Workers 甚至通过 Expo 在 React Native 应用中)和新的数据库中使用 Prisma ORM 成为可能,并实现了许多非常受欢迎的功能,例如将您的 schema.prisma
分割成多个文件,能够从批量创建查询中返回创建的记录,或者从查询结果负载中排除特定字段。
支持来自 PlanetScale 和 Neon 的无服务器驱动程序
PlanetScale 和 Neon 都发布了无服务器驱动程序,可以通过 HTTP(而非通常用于数据库连接的 TCP)访问其数据库实例。这些无服务器驱动程序在无服务器和 Edge 环境中特别有用,因为在这些环境中启动 TCP 连接可能成本过高或完全不可能。
在 v5.4.0 中,我们发布了对 Prisma ORM 中自定义数据库驱动程序的支持,从而能够使用 PlanetScale 和 Neon 的无服务器驱动程序。以下是使用其无服务器驱动程序连接到 PlanetScale 实例的示例:
Prisma ORM:一个适用于 Edge 环境的数据库交互方式
Edge Functions,例如 Cloudflare Workers 或 Vercel Edge Functions,越来越受欢迎。由于其高地理分布和靠近用户的特性,它们能够实现闪电般的响应时间。
自 v5.11.0 起,Prisma ORM 可以在这些 Edge 环境中使用。这是一个重要的成就,我们很高兴看到开发者在 Edge 环境中用 Prisma ORM 构建什么!
您可以在这篇博客文章中了解更多关于此功能的信息:Prisma ORM 对 Edge Functions 的支持现已推出预览版。
新数据库:D1 和 Turso
自 v5 以来,我们不仅使得 Prisma ORM 可以在新的运行时环境中使用。我们还增加了对新数据库的支持,例如 Cloudflare D1 和 Turso。
这两个数据库都基于 SQLite,非常适合在 Edge 环境中构建应用程序。
将您的 Prisma Schema 分割成多个文件
在 v5.15.0 中,我们解决了一个热门的功能请求,使得可以将您的 Prisma Schema 分成多个文件。例如,您现在可以拥有以下两个文件,每个文件包含一个模型:
user.prisma
post.prisma
当您运行迁移或其他 Prisma CLI 命令时,CLI 会将各个文件合并成一个文件。在这篇公告博客文章中了解更多关于此功能的信息:在 v5.15 中将您的 Prisma Schema 分割成多个文件
提升 Prisma Client API 的灵活性
除了所有这些改进之外,我们还在 Prisma Client API 中融入了新的功能,使得从数据库查询数据变得更加轻松和便捷。
例如,新的 createManyAndReturn()
查询使您能够在单个查询中创建多个记录,同时返回所有新记录:
在以前的版本中,一次创建多个记录的唯一方法是使用 createMany
,它只返回创建记录的数量。
Prisma Client API 灵活性提升的另一个例子是新的 omit
选项。它是 select
的对应项,允许您从查询的结果负载中排除字段:
上面的查询将返回 User
模型的所有字段,除了 password
字段。
类型化 SQL:类型安全的原始 SQL 查询
最后,我们今年交付的最令人兴奋的功能之一是编写类型安全的原始 SQL 查询的方法。有了这一新增功能,Prisma ORM 现在为您提供了两全其美的体验:大多数查询的便捷高级抽象,以及针对原始 SQL 的灵活、类型安全的逃生出口。
考虑这个您可能需要在应用程序中编写的原始 SQL 查询示例:
生成步骤后,您就可以通过 Prisma Client 中新的 $queryRawTyped
方法使用 conversionByVariant
查询:
在我们的博客上了解更多:宣布推出 TypedSQL:使用 Prisma ORM 让您的原始 SQL 查询类型安全
还有一件事:Prisma Postgres — 与 Prisma ORM 搭配使用的最佳数据库
虽然我们在 Prisma ORM 方面取得了巨大进展,但我们的亮点是最近推出的 Prisma Postgres — 与 Prisma ORM 搭配使用的最佳数据库!
Prisma Postgres 是一项托管式 PostgreSQL 服务,它为开发者提供了一个始终在线的数据库,按存储和查询量按需付费(无固定成本,无计算成本)。它就像一个无服务器数据库——但没有冷启动,并且有一个慷慨的免费层级!
为了构建具有这些能力的服务,我们设计了一种独特的架构,使用了裸金属服务器、革命性的毫秒级云栈以及作为超轻量级微虚拟机运行的 unikernels(可以理解为:“高度专业化的操作系统”)。
得益于 Prisma 产品的出色集成,Prisma Postgres 开箱即用地提供了连接池、缓存、实时订阅和查询优化建议。
尝试 Prisma Postgres
感谢您的支持 💚
只有感谢您——我们了不起的社区——我们才得以打造 TypeScript 生态系统中最受欢迎的 ORM。
非常感谢大家一直以来的支持、反馈和意见,这些都帮助我们每天都在改进 Prisma。
如果您有什么想分享的,无论是求助、热烈的赞美还是建设性的反馈,都可以随时通过我们的 Discord 和 X 联系我们。
✨ 我们一直在努力改进!如果您最近使用过 Prisma ORM,希望您能通过这份2 分钟的问卷与我们分享您的体验感受。
不要错过下一篇文章!
订阅 Prisma 新闻通讯