2024年3月12日

Prisma ORM 對邊緣函式(Edge Functions)的支援現已進入預覽階段

我們很高興地宣佈,對邊緣函式的支援已進入預覽階段!您現在可以透過Vercel邊緣函式、Vercel邊緣中介軟體、Cloudflare Workers和Cloudflare Pages,使用Prisma ORM訪問您的資料庫。立即試用

Prisma ORM Support for Edge Functions (Preview)

什麼是邊緣函式?

邊緣函式是一種輕量級的無伺服器計算形式,分佈在全球各地。它們允許您將應用程式部署並執行在儘可能靠近終端使用者的位置。

邊緣函式可以使您的應用更快

得益於邊緣函式的地理分散式特性,使用者與資料中心之間的距離得以縮短。這降低了請求延遲並改善了響應時間,使邊緣函式成為提升應用效能並顯著改善使用者體驗的絕佳方法。

邊緣函式中的技術限制

Vercel邊緣函式和Cloudflare Workers不使用標準的Node.js執行時。相反,它們是在V8隔離環境中執行程式碼。因此,這些邊緣函式只能訪問標準Node.js API的一個小子集,並且計算資源(CPU和記憶體)也受到限制。

特別是,無法自由開啟TCP連線的限制使得從邊緣函式與傳統資料庫通訊變得困難。雖然Cloudflare引入了一個connect() API,實現了有限的TCP連線,但這仍然只能透過與該API相容的特定資料庫驅動程式進行資料庫訪問。

注意: 在Node.js生態系統中,與Cloudflare Workers相容的最受歡迎的傳統資料庫驅動程式是用於PostgreSQL的node-postgres。然而,目前也正在進行工作,以使node-mysql2驅動程式中的MySQL相容Cloudflare Workers。

現代資料庫提供商,例如NeonPlanetScale,透過釋出透過HTTP與資料庫通訊的無伺服器驅動程式來規避這一限制。

使用Prisma ORM在邊緣函式中訪問資料庫 🎉

儘管在早期版本中可以在邊緣函式中使用Prisma ORM,但這始終需要使用Prisma Accelerate作為邊緣函式和資料庫之間的代理。

由於上述技術限制,無法“直接”將帶有Prisma ORM的應用程式部署到邊緣。

  • 資料庫訪問僅適用於特定驅動程式(無論是無伺服器驅動程式還是與Cloudflare的connect()相容的驅動程式)。這裡的問題是Prisma ORM過去只在其查詢引擎中內建驅動程式,因此無法使用相容的Node.js驅動程式。
  • 上傳到邊緣函式的應用程式包大小限制使得使用Prisma ORM變得不可能,因為其查詢引擎過大,超出了大小限制。
  • 邊緣函式只允許訪問有限的Node.js API。然而,Prisma Client需要其中一些API才能工作,因此無法訪問這些API需要Prisma Client繞過一些限制。

我們很高興地宣佈,v5.11.0 版本釋出
解除了這些限制,並支援在邊緣函式中執行Prisma ORM(預覽版)🎉

得益於最近引入的驅動程式介面卡預覽功能,開發者現在可以將Prisma ORM與他們喜愛的Node.js生態系統中的資料庫驅動程式一起使用!

此外,我們已經能夠大幅減小Prisma ORM查詢引擎的大小,使其現在可以適應邊緣函式有限的執行時環境。

如何在邊緣函式中使用Prisma ORM

🔬 如果您有興趣檢視實際示例,我們整理了一個小型的GitHub倉庫,演示如何使用Prisma ORM和Vercel邊緣函式訪問您的資料庫。

請按照以下步驟學習如何在Cloudflare Worker中使用PlanetScale資料庫來啟動並執行Prisma ORM(或檢視我們的文件以使用不同的邊緣部署和資料庫提供商組合)。

0. 前提條件

在執行以下步驟之前,請確保您已具備

  • 您的機器上已安裝Node.js
  • 一個Cloudflare賬戶
  • 一個正在執行的PlanetScale例項及其可用的連線字串

1. 設定您的應用程式

使用create-cloudflare-cli初始化您的專案,並按照CLI嚮導中的步驟操作,選擇提示的預設選項

2. 設定Prisma

進入新目錄並安裝Prisma CLI

接下來,使用以下命令在您的專案中初始化Prisma

上述命令

  • prisma/schema.prisma中建立了Prisma schema檔案
  • 建立了一個.env檔案來儲存環境變數

.env檔案包含一個佔位符DATABASE_URL環境變數。

使用連線到您的PlanetScale資料庫的實際連線字串更新該值。它可能看起來像這樣

注意: 上述連線字串使用了資料庫的使用者名稱密碼名稱的佔位符。請務必將它們替換為您自己資料庫的值。

更新您的Prisma schema如下所示

上述Prisma schema

  • 啟用了driverAdapters預覽功能標誌
  • 定義了一個Log模型和Level列舉

要將您的資料模型對映到資料庫,您需要使用prisma db push CLI 命令

這在您的資料庫中建立了一個新的Log表,您現在可以在PlanetScale儀表板中檢視。

3. 編寫Cloudflare Worker函式

在您的wrangler.toml檔案中,新增一個[vars]鍵和您的資料庫連線字串(像之前一樣,用您自己的PlanetScale例項的值替換USERNAMEPASSWORDDATABASE的佔位符)

注意: 由於這是一個演示應用,我們將純連線字串新增到wrangler.toml中。然而,由於此檔案通常會被提交到版本控制,您在生產環境中絕不應這樣做,因為它會公開您的資料庫連線。相反,請使用Cloudflare的secrets配置

接下來,安裝PlanetScale無伺服器資料庫驅動程式及其驅動程式介面卡

使用以下程式碼更新src/index.ts檔案中的示例Cloudflare Worker程式碼片段

啟動應用程式

從終端輸出中,您現在可以開啟指向localhost的URL,或按下b鍵開啟瀏覽器並呼叫Worker函式。

如果一切順利,您將看到類似於以下的輸出

4. 釋出到Cloudflare Workers

您現在可以透過執行以下命令部署應用程式

此命令會將您的邊緣函式部署到Cloudflare,並輸出可以訪問它的URL。

試用並分享您的反饋

我們很想聽聽您的想法!請嘗試使用VercelCloudflare進行邊緣部署的新支援,並透過TwitterDiscord與我們分享您的反饋🚀

如果您遇到任何問題,可以在此處建立錯誤報告。

不要錯過下一篇文章!

訂閱Prisma新聞通訊

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