Prisma 正在發布來自 Neon 和 PlanetScale 的無伺服器資料庫驅動程式的預覽版支援。此功能讓 Prisma 使用者能夠利用現有的資料庫驅動程式與其資料庫進行通訊,而無需長期 TCP 連線!
什麼是無伺服器資料庫驅動程式?
傳統上,資料庫驅動程式會與資料庫建立長期 TCP 連線以進行通訊。儘管 TCP 連線在開始時有一些額外負擔,但持續的通訊幾乎沒有額外負擔,使其成為伺服器部署的理想選擇。
然而,長期連線可能會在無伺服器環境中造成問題。鑑於無伺服器功能的短暫性,追蹤連線、關閉閒置連線、處理殭屍程序以及維護內部連線池,以避免資料庫不堪負荷,可能會變成一件苦差事。最重要的是,越來越多的雲端供應商不允許任意 TCP 連線,這使得使用依賴 TCP 連線的現有資料庫變得具有挑戰性。

無伺服器功能可能會快速耗盡資料庫連線
為了回應上述問題,Prisma 開發了 Prisma Accelerate,以便為在無伺服器功能上運行的應用程式提供更好的體驗。此外,一些資料庫供應商也開發了自己的資料庫驅動程式庫。這些驅動程式使用不同的協定,例如 HTTP 或 WebSocket,而不是傳統的 TCP 連線,因此非常適合快速發展的無伺服器環境。
那麼,這些無伺服器驅動程式如何與 Prisma 搭配使用呢?
Prisma ORM 現在支援無伺服器驅動程式
自 最初發布以來,Prisma ORM 的一個關鍵部分一直是查詢引擎。查詢引擎以 Rust 語言編寫,可將 Prisma Client 查詢可靠且有效率地轉換為 SQL 語句,然後透過包含的資料庫驅動程式執行這些語句。此系統過去運作良好,但幾個月前,我們注意到新資料庫供應商提供以 JavaScript 編寫的無伺服器資料庫驅動程式的趨勢,這些驅動程式透過 HTTP 與特殊端點通訊。我們的團隊知道,建立與這些新端點通訊的基於 Rust 的實作將會是一項艱鉅的任務。

Prisma Client 在沒有驅動程式轉接器的情況下與資料庫通訊。
此外,雖然 Prisma ORM 可與許多資料庫引擎和供應商搭配使用,但它只能透過直接 TCP 連線,或透過連線池程式(例如 Prisma Accelerate)連線到這些資料庫。今天,透過引入 驅動程式轉接器,這兩個問題都已解決,驅動程式轉接器使 Prisma ORM 能夠在使用現有的 JavaScript 資料庫驅動程式連線到受支援的資料庫時。
今天,我們發布了兩個驅動程式轉接器:@prisma/adapter-neon
和 @prisma/adapter-planetscale
。這些轉接器充當 Prisma Client 和 JavaScript 無伺服器資料庫驅動程式之間的「翻譯器」。如果您正在使用資料庫驅動程式和驅動程式轉接器,您的應用程式不再需要直接 TCP 連線到您的資料庫才能運作,而是透過 HTTP 或 WebSocket 連線與您的資料庫通訊。Prisma 使用 Rust 引擎將 Prisma Client 查詢翻譯為 SQL,然後透過這些驅動程式執行這些查詢。透過這種設定,我們能夠提供兩全其美的優勢:經過實戰考驗的查詢引擎,以及在 Prisma 驅動的程式碼庫中使用越來越多供應商的能力。

Prisma Client 使用驅動程式轉接器和無伺服器資料庫驅動程式與資料庫通訊。
現在,唯一的要求是能夠發出 HTTP 或 WebSocket 請求,從而大幅簡化 Function-as-a-Service (FaaS) 部署。
如何將 Prisma ORM 與無伺服器資料庫驅動程式搭配使用
設定 Prisma 以與 Neon 或 PlanetScale 無伺服器資料庫驅動程式搭配使用非常容易
- 像往常一樣設定您的資料庫驅動程式
- 將其傳遞到對應的 Prisma 驅動程式轉接器
- 使用該驅動程式轉接器建立 Prisma Client
首先,安裝 prisma
和 @prisma/client
,版本至少為 5.4.1
。另請安裝 dotenv
,以便在您的 .env
檔案中定義的任何環境變數都可透過 process.env
在您的腳本中使用。
現在,您可以如下所示設定 Prisma Client。
將 Neon 與 @neondatabase/serverless
搭配使用

在 Neon 上建立資料庫後,您需要安裝 @prisma/adapter-neon
驅動程式轉接器、Neon 的無伺服器資料庫驅動程式 @neondatabase/serverless
和 ws
,以設定供 Neon 使用的 WebSocket 連線。
然後確保您的 Neon 資料庫連線字串已複製到您的 .env
檔案中。連線字串將以 postgres://
開頭。
您現在可以在您的 schema.prisma
資料來源中參考此環境變數。請確保您也包含 driverAdapters
預覽功能。
現在執行 npx prisma generate
以重新產生 Prisma Client,並使預覽功能在您的應用程式中可用。
完成上述設定後,您可以繼續在您的腳本中操作
- 匯入套件
- 設定 Neon 無伺服器資料庫驅動程式
- 使用 Neon 無伺服器資料庫驅動程式實例化 Prisma Neon 轉接器
- 將驅動程式轉接器傳遞到 Prisma Client 實例
現在您的程式碼具有 Neon 無伺服器驅動程式的內建優勢,例如 WebSocket 連線和 訊息管線化,而 Prisma 涵蓋連線建立和銷毀、錯誤處理和類型安全。如果您對我們的 Neon 無伺服器驅動程式支援有任何意見回饋,請在我們的 專用 GitHub 問題上留言,我們將在繼續開發時使用它。
將 PlanetScale 與 @planetscale/database
搭配使用

開始 使用 PlanetScale 後,您可以使用 PlanetScale 無伺服器驅動程式連線到您的資料庫。您將需要安裝 @prisma/adapter-planetscale
驅動程式轉接器、@planetscale/database
無伺服器驅動程式和 undici
,以便為 PlanetScale 驅動程式提供 fetch
函數。
然後確保您的 PlanetScale 資料庫連線字串已複製到您的 .env
檔案中。連線字串將以 mysql://
開頭
您現在可以在您的 schema.prisma
資料來源中參考此環境變數。請確保您也包含 driverAdapters
預覽功能。
現在執行 npx prisma generate
以重新產生 Prisma Client,並使預覽功能在您的應用程式中可用。
您的 Prisma Client 實例現在使用 PlanetScale 的 database-js
,它可以 提高連線可靠性和效能。它使用 HTTP 請求而不是 Prisma 的連線池,但 Prisma 將繼續處理錯誤處理和類型安全。如果您對我們的 PlanetScale 無伺服器驅動程式支援有任何意見回饋,請在我們的 專用 GitHub 問題上留言,我們將在繼續開發時使用它。
雖然資料庫驅動程式和驅動程式轉接器的設定與我們現有的「開始使用」指南不同,但您的 Prisma Client 會感覺非常熟悉,只是現在它正在利用您選擇的資料庫用戶端,並在不使用 TCP 連線的情況下與您的資料庫通訊。
總結
我們很高興 Prisma 使用者現在可以利用 Neon 和 PlanetScale 無伺服器資料庫驅動程式。這些驅動程式非常適合無伺服器環境或長期 TCP 連線不可用的區域。
Prisma Client 和新的驅動程式轉接器功能目前尚不支援 Edge Functions 部署,例如 CloudFlare Workers 或 Vercel Edge Functions。如果您想在 Edge Functions 環境中測試 Neon 或 PlanetScale 無伺服器驅動程式,請務必提交對我們 調查的回應,以便您也被考慮搶先體驗我們的 edge function 支援。我們很快就會發布消息。
我們很想知道您的想法!試用 driverAdapters
預覽功能,並透過我們的 GitHub 討論區(針對 Neon 和 PlanetScale)或我們的 Discord 傳達您的任何意見回饋。
不要錯過下一篇文章!
註冊 Prisma 電子報