跳到主要內容

Neon

本指南解釋瞭如何

什麼是 Neon?

Neon 是一個功能齊全的無伺服器 PostgreSQL,提供慷慨的免費套餐。Neon 分離了儲存和計算,並提供了現代化的開發者功能,如無伺服器、分支、無限儲存等。Neon 是開源的,並使用 Rust 編寫。

在此瞭解更多關於 Neon 的資訊 此處

與其他資料庫提供商的共同點

將 Prisma ORM 與 Neon 結合使用的許多方面,與將 Prisma ORM 與任何其他 PostgreSQL 資料庫結合使用一樣。您可以

需要考慮的差異

在決定將 Neon 與 Prisma ORM 結合使用時,您應該注意 Neon 和 PostgreSQL 之間的一些差異

  • Neon 的無伺服器模型 — 預設情況下,Neon 會在 5 分鐘不活動後將 計算例項 縮放到零。在此狀態下,計算例項處於空閒狀態。此功能的一個特點是“冷啟動”的概念。從空閒狀態啟用計算例項需要 500 毫秒到幾秒鐘。根據連線到資料庫所需的時間,您的應用程式可能會超時。欲瞭解更多資訊,請參閱:連線延遲和超時
  • Neon 的連線池器 — Neon 使用 PgBouncer 提供連線池,支援多達 10,000 個併發連線。欲瞭解更多資訊,請參閱:連線池

如何使用 Neon 的連線池

如果您希望使用 Neon 中可用的 連線池,您需要在 Prisma schema 的 datasource 塊中 url 屬性使用的 DATABASE_URL 環境變數的主機名中新增 -pooler

.env
# Connect to Neon with Pooling.
DATABASE_URL=postgres://daniel:<password>@ep-mute-rain-952417-pooler.us-east-2.aws.neon.tech:5432/neondb?sslmode=require

如果您希望使用 Prisma CLI 對資料庫執行其他操作(例如用於遷移),您將需要新增一個 DIRECT_URL 環境變數,並在 Prisma schema 的 datasource 塊的 directUrl 屬性中使用,以便 CLI 將使用直接連線字串(不含 PgBouncer)

.env
# Connect to Neon with Pooling.
DATABASE_URL=postgres://daniel:<password>@ep-mute-rain-952417-pooler.us-east-2.aws.neon.tech/neondb?sslmode=require

# Direct connection to the database used by Prisma CLI for e.g. migrations.
DIRECT_URL="postgres://daniel:<password>@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb"

然後您可以更新 schema.prisma 以使用新的直接 URL

schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}

有關 directUrl 欄位的更多資訊,請參見 此處

資訊

我們強烈建議在您的 DATABASE_URL 環境變數中使用連線池字串。您將獲得 Prisma CLI 帶來的出色開發體驗,同時無論部署策略如何,都能夠進行連線池。雖然這對於每個應用程式來說並非嚴格必要,但無伺服器解決方案將不可避免地需要連線池。

解決連線超時問題

從 Prisma ORM 連線到 Neon 時發生的連線超時會導致類似以下錯誤

Error: P1001: Can't reach database server at `ep-white-thunder-826300.us-east-2.aws.neon.tech`:`5432`
Please make sure your database server is running at `ep-white-thunder-826300.us-east-2.aws.neon.tech`:`5432`.

此錯誤很可能意味著 Prisma Client 建立的連線在 Neon 計算例項啟用之前超時。

Neon 計算例項有兩種主要狀態:活躍空閒。活躍表示計算例項正在執行。如果 5 分鐘內沒有查詢活動,Neon 預設會將計算例項置於空閒狀態。請參閱 Neon 文件以 瞭解更多

當您從 Prisma ORM 連線到空閒的計算例項時,Neon 會自動啟用它。啟用通常在幾秒鐘內完成,但增加的延遲可能導致連線超時。為解決此問題,您可以透過新增 connect_timeout 引數來調整 Neon 連線字串。此引數定義了等待新連線開啟的最大秒數。預設值為 5 秒。更高的設定應該能提供避免連線超時問題所需的時間。例如

DATABASE_URL=postgres://daniel:<password>@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb?connect_timeout=10
資訊

connect_timeout 設定為 0 表示沒有超時。

連線超時的另一個可能原因是 Prisma ORM 的 連線池,其預設超時時間為 10 秒。這對於 Neon 通常是足夠的,但如果您仍然遇到連線超時,您可以嘗試透過將 pool_timeout 引數設定為更高值來增加此限制(除了上述的 connect_timeout 設定)。例如

DATABASE_URL=postgres://daniel:<password>@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb?connect_timeout=15&pool_timeout=15

如何將 Neon 的無伺服器驅動程式與 Prisma ORM 結合使用(預覽版)

Neon 無伺服器驅動程式 是一款低延遲的 Postgres 驅動程式,適用於 JavaScript 和 TypeScript,允許您透過 HTTP 或 WebSockets 而非 TCP 從無伺服器和邊緣環境中查詢資料。

您可以將 Prisma ORM 與 Neon 無伺服器驅動程式結合使用,方法是使用 驅動程式介面卡。驅動程式介面卡允許您使用與 Prisma ORM 提供的預設資料庫驅動程式不同的驅動程式來與您的資料庫通訊。

資訊

此功能從 Prisma ORM 5.4.2 及更高版本開始提供預覽版。

首先,啟用 driverAdapters 預覽功能標誌

generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

生成 Prisma Client

npx prisma generate

安裝 Neon 的 Prisma ORM 介面卡

npm install @prisma/adapter-neon

更新您的 Prisma Client 例項

import { PrismaClient } from '@prisma/client'
import { PrismaNeon } from '@prisma/adapter-neon'
import dotenv from 'dotenv'

dotenv.config()
const connectionString = `${process.env.DATABASE_URL}`

const adapter = new PrismaNeon({ connectionString })
const prisma = new PrismaClient({ adapter })

然後,您可以像往常一樣使用 Prisma Client,並享受完整的型別安全。Prisma Migrate、內省和 Prisma Studio 將繼續像以前一樣工作,使用 Prisma schema 中定義的連線字串。

備註

指定 PostgreSQL schema

您可以在例項化 PrismaNeon 時,透過傳入 schema 選項來指定一個 PostgreSQL schema

const adapter = new PrismaNeon(
{ connectionString },
{ schema: 'myPostgresSchema' })
© . This site is unofficial and not affiliated with Prisma Data, Inc.