2024年11月28日

Prisma 6:更高性能、更强灵活性和类型安全的SQL

今天,我们发布了 Prisma v6!自上一个主要版本以来,我们一直努力采纳用户反馈,使 Prisma ORM 更快、更灵活,并添加了类型安全的原始 SQL 查询等出色功能。

Prisma 6: Better Performance, More Flexibility & Type-Safe 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 PlanetScaleNeon 都发布了无服务器驱动程序,可以通过 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 D1Turso

这两个数据库都基于 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。

如果您有任何想分享的内容,无论是求助、热情的赞扬还是建设性反馈,您都可以随时通过我们的 DiscordX 联系我们。

✨ 我们一直在努力改进!如果您最近使用过 Prisma ORM,我们非常乐意通过这份2分钟调查了解您的使用体验。

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . All rights reserved.