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 新聞通訊

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