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 现在让您选择最佳的 JOIN 策略(预览)

嵌套 create 操作的性能改进

使用 Prisma ORM,您可以在嵌套查询中创建多个新记录,例如:

v5.11.0 之前的版本中,Prisma ORM 会将其转换为多个 SQL INSERT 查询,每个查询都需要自己的数据库往返。从这个版本开始,这些嵌套的 create 查询得到了优化,并且 INSERT 查询会批量发送到数据库,在一个单次往返中完成。这些优化适用于一对多关系以及多对多关系。

自 v5 以来几乎每个版本都加快了查询速度

如果您查看 GitHub 上的 Prisma ORM 发布版本,您会发现几乎每个版本都带来了一些性能改进。

我们致力于继续投入于查询性能,以确保您的查询尽可能快 💚 顺便说一下,如果您好奇 Prisma ORM 在性能方面与其他 TypeScript ORM 相比如何,请查看我们的TypeScript ORM 基准测试

灵活性:Node.js 驱动、Edge 支持、多模式文件及更多

在过去的一年里,我们不仅提高了性能,还大大增强了 Prisma ORM 的灵活性。自 Prisma v5 以来,我们已经可以在新的环境(如 Cloudflare Workers 甚至通过 Expo 的 React Native 应用程序)、使用新的数据库中使用 Prisma ORM,并实现了备受欢迎的功能,例如将您的 schema.prisma 分割成多个文件、能够从批量创建查询中返回已创建的记录,或者从查询结果负载中排除特定字段。

支持 PlanetScale 和 Neon 的无服务器驱动

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 字段。

Typed 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 服务,为开发人员提供了一个始终在线的数据库,采用按需付费的存储和查询定价(没有固定成本,没有计算成本)。它就像一个无服务器数据库——但没有冷启动和慷慨的免费套餐!

为了构建具有这些能力的服务,我们设计了一个独特的架构,使用裸机机器、革命性的毫秒级云堆栈和作为超轻量级 microVM 运行的unikernel(可以理解为:“高度专业化的操作系统”)。

得益于 Prisma 产品的头等集成,Prisma Postgres 开箱即用,提供连接池、缓存、实时订阅和查询优化建议


尝试Prisma Postgres

感谢您的支持 💚

正是因为有您——我们了不起的社区——我们才能够创建 TypeScript 生态系统中最受欢迎的 ORM

非常感谢大家一直以来的支持、反馈和建议,帮助我们每天改进 Prisma。

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

✨ 我们一直在努力改进!如果您最近使用过 Prisma ORM,我们希望您能通过这份 2 分钟的调查分享您的体验。

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.