今天,我们发布了 Prisma v6!自上一个主要版本以来,我们一直努力采纳用户反馈,使 Prisma ORM 更快、更灵活,并添加了类型安全的原始 SQL 查询等出色功能。
Prisma v6:您需要了解的内容
我们很高兴宣布 Prisma ORM 又发布了一个重要版本。我们希望借此机会回顾自 Prisma v5 以来发生的一切。
如果您正在使用 Prisma ORM 并希望升级到 v6,请查看升级指南。
升级到 v6
性能:JOINs 和更高效的查询
在 Prisma ORM 的开发过程中,我们遵循了“让它工作,让它正确,让它快速”的方法。自2021年首次发布以来,我们不断投入以提高查询性能,并自上次主要版本发布以来显著提高了查询速度,我们为此感到自豪。
选择最佳的 JOIN 策略
原则上,当您需要从通过外键关联的多个表中查询数据时,有两种不同的方法
- 数据库级别:使用 SQL
JOIN
关键字向数据库发送单个查询,并让数据直接由数据库连接。 - 应用级别:向数据库中的各个表发送多个查询,并在您的应用程序中自行连接数据。
根据您的用例、数据库架构和多种其他因素,一种策略可能比另一种更合适。在 Prisma ORM v5.7.0 之前,Prisma ORM 总是使用应用级别的 JOIN 策略。
然而,随着 v5.7.0 版本的发布,我们现在允许您根据您的用例选择最佳的 JOIN 策略,确保您始终能为查询获得最佳性能。要选择 JOIN 策略,您可以在关系查询上使用 relationLoadStrategy
选项,例如
如果您想了解这两种方法在底层如何工作以及何时选择哪种 JOIN 策略,请查看这篇博客文章:Prisma ORM 现在允许您选择最佳的连接策略(预览版)。
嵌套 create
操作的性能改进
使用 Prisma ORM,您可以在嵌套查询中创建多个新记录,例如
在 v5.11.0 之前的版本中,Prisma ORM 会将其转换为多个 SQL INSERT
查询,每个查询都需要单独往返数据库。从这个版本开始,这些嵌套的 create
查询得到了优化,INSERT
查询将批量在一次往返中发送到数据库。这些优化适用于一对多和多对多关系。
自 v5 以来几乎每个版本都加快了查询速度
如果您查阅 GitHub 上的 Prisma ORM 版本,您会发现几乎每个版本都带有一些性能改进。
我们致力于继续投资查询性能,以确保您的查询尽可能快速 💚 顺便说一句,如果您好奇 Prisma ORM 在性能方面与其他 TypeScript ORM 相比如何,请查看我们的 TypeScript ORM 基准测试。
灵活性:Node.js 驱动程序、边缘支持、多模式文件及更多
在过去的一年里,我们不仅提高了性能,还让 Prisma ORM 变得更加灵活。自 Prisma v5 以来,我们已经可以在新的环境中(如 Cloudflare Workers 甚至通过 Expo 的 React Native 应用程序)、使用新的数据库,并实现了许多广受欢迎的功能,例如将您的 schema.prisma
拆分为多个文件,能够从批量创建查询中返回创建的记录,或者从查询的结果负载中排除特定字段。
支持来自 PlanetScale 和 Neon 的无服务器驱动程序
Both PlanetScale 和 Neon 都发布了无服务器驱动程序,可以通过 HTTP(而不是通常用于数据库连接的 TCP)访问其数据库实例。这些无服务器驱动程序在无服务器和边缘环境中特别有用,因为在这些环境中发起 TCP 连接可能成本过高或完全不可能。
在 v5.4.0 中,我们发布了 Prisma ORM 对自定义数据库驱动程序的支持,从而可以使用 PlanetScale 和 Neon 无服务器驱动程序。以下是使用 PlanetScale 无服务器驱动程序连接到 PlanetScale 实例的示例
Prisma ORM:一种边缘就绪的数据库交互方式
边缘函数,例如 Cloudflare Workers 或 Vercel Edge Functions,越来越受欢迎。由于其高地理分布和靠近用户,它们能够实现闪电般的响应时间。
自 v5.11.0 以来,Prisma ORM 可以在这些边缘环境中使用。这是一项重大成就,我们很高兴看到开发者们正在使用 Prisma ORM 在边缘构建什么!
您可以在这篇博客文章中了解更多关于此功能的信息:Prisma ORM 对边缘函数的支持现已推出预览版。
新数据库:D1 和 Turso
自 v5 以来,我们不仅支持在新的运行时中使用 Prisma ORM。我们还增加了对新数据库的支持,如 Cloudflare D1 和 Turso。
这两个数据库都基于 SQLite,非常适合在边缘构建应用程序。
将您的 Prisma 模式拆分为多个文件
在 v5.15.0 中,我们解决了一个广受欢迎的功能请求,并实现了由多个文件构成 Prisma 模式的可能性。例如,您现在可以拥有以下两个文件,每个文件都包含一个模型
user.prisma
post.prisma
当您运行迁移或其他 Prisma CLI 命令时,CLI 会将单个文件合并为一个文件。在我们的发布博客文章中了解有关此功能的更多信息:在 v5.15 中将您的 Prisma 模式组织成多个文件
使 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 新闻通讯