常見問題
Prisma Pulse 支援哪些資料庫?
Prisma Pulse 目前支援 PostgreSQL v12 及更高版本。我們很樂意聽取您希望接下來支援哪些資料庫的意見。
Prisma Pulse 支援哪些資料庫供應商?
任何允許您啟用邏輯複製的 PostgreSQL 供應商都受支援
供應商 | 入門版 | 專業版 | 商務版 | 企業版 |
---|---|---|---|---|
Railway | ✅ | ✅ | ✅ | ✅ |
Supabase | ✅ | ✅ | ✅ | ✅ |
Neon | ❌ | ✅ | ✅ | ✅ |
AWS RDS | ✅ | ✅ | ✅ | ✅ |
請注意,由於 Neon 不提供資料庫的超級使用者存取權限,因此您無法在入門版方案中使用 Neon 託管的資料庫。
Pulse 會儲存我的資料庫事件嗎?
如果您透過主控台在專案中啟用事件持久性功能,Pulse 就會持久儲存資料庫事件。這讓您可以使用 stream()
API 並利用交付保證。
持久儲存事件會如何影響定價?
如果您為專案啟用事件持久性,Pulse 會以與交付形狀相同的形式儲存資料庫中發生的事件。
API 的使用量會根據以下因素計費
- 資料庫事件:Pulse擷取的資料庫事件數量
- 事件讀取:Pulse 透過
.stream()
讀取和交付的資料庫事件數量 - 事件儲存:儲存的事件消耗的磁碟空間量(以 GiB 為單位)
即使我不透過 name
使用具名串流,事件持久性仍會向我收費嗎?
是的。如果您在專案中啟用事件持久性,您的資料庫事件將會被持久儲存,並且您將相應地被收費。
有多少個 Prisma Client 執行個體可以訂閱資料庫事件?
透過 Prisma Pulse 訂閱的 Prisma Client 執行個體數量有以下限制
stream()
的訂閱者數量上限為 1000 個subscribe()
的訂閱者數量上限為 20 個
如何提高 Prisma Pulse 的輸送量?
隨著資料庫事件大小和並行監聽器數量的減少,Prisma Pulse 的輸送量將會增加。
雖然限制資料庫事件大小可能很棘手,但我們建議一些最佳實務,例如
- 避免在模型中使用大型欄位,例如在資料庫中儲存 base64 影像字串。相反地,請考慮將它們儲存在流行的檔案儲存選項中,例如 AWS S3 或 Cloudflare。
- 為特定模型而非資料庫中的所有模型建立發布槽。您可以在此處了解更多關於管理複寫槽的資訊。
- 升級以使用較新版本的 PostgreSQL,因為效能已最佳化。較新版本的 PostgreSQL (
v15
+) 允許您為特定模型的特定欄位建立發布槽。
我可以在前端程式碼中使用 Pulse 嗎?
不行,Pulse 是伺服器端,訂閱無法直接在用戶端程式碼中啟動。如果您認為此功能很有價值,請在我們的社群 Discord 的 #help-and-questions
頻道上分享您的想法。
若要將事件傳播到前端,您可以使用 WebSocket 程式庫,例如 socket.io。
當我的 tsconfig.json
中使用 "moduleResolution":"bundler"
時,我該如何匯入 Pulse Client 擴充功能?
如果您在 tsconfig.json
檔案中使用 "moduleResolution": "bundler"
,並且您的 Pulse 擴充功能版本為 1.2.0
或更高版本,請根據您的執行階段匯入 Pulse 擴充功能
- Node.js
- Cloudflare Workers
import { withPulse } from '@prisma/extension-pulse/node';
import { withPulse } from '@prisma/extension-pulse/workerd';
Pulse Client 擴充功能提供特定於執行階段的實作。此方法可確保 TypeScript 為您的目標環境和任何其他多入口點套件使用正確的類型定義。
使用正確的特定於執行階段的匯入可以防止以下錯誤
Cannot find module '@prisma/extension-pulse' or its corresponding type declarations.
或者,您可以設定 tsconfig.json 以設定正確的執行階段條件
// tsconfig.json
{
"compilerOptions": {
// ...other options
"target": "es2022",
"moduleResolution": "bundler",
"customConditions": ["node"] // or "workerd" for Cloudflare Workers
}
}
當建置將 Prisma Pulse Client 擴充功能作為相依性的套件時,我們建議使用此方法。
這兩種方法都可確保使用正確的特定於執行階段的類型,並解決模組解析錯誤。
如何確保 SSL/TLS 加密在 PostgreSQL 資料庫和 Pulse 的僅限 SSL 模式下運作?
如果您在使用 Pulse 時遇到 SSL/TLS 加密問題,請確保您的資料庫伺服器具有有效的 SSL 憑證,並將 sslmode=require
附加到 Prisma Data Platform 中專案環境的資料庫連線字串,例如
postgres://username:password@hostname:port/database?sslmode=require
此設定將強制執行 SSL/TLS 加密並接受自我簽署憑證。
何時應為 Prisma Pulse 啟用靜態 IP?
當您的安全性設定需要 IP 允許清單,或者您正在實作僅允許來自受信任 IP 存取的防火牆時,請為 Pulse 啟用靜態 IP,以確保受控且安全的資料庫連線。
在平台主控台中了解更多關於如何為 Pulse 啟用靜態 IP 的資訊。
ℹ️ 若要為您現有或新的專案環境中的 Accelerate 啟用靜態 IP 支援,您的工作區需要採用我們的專業版或商務版方案。請查看定價頁面以取得更多資訊。
什麼是靜態 IP?
靜態 IP 位址是固定的 IPv4 或 IPv6 位址。與可能不可預測地變更的動態 IP 位址不同,來自靜態 IP 位址的流量可以輕鬆識別。
Accelerate 和 Pulse 的靜態 IP 範圍是否不同?
否,如果您使用相同的資料庫 URL 為 Accelerate 和 Pulse 都啟用了靜態 IP,則產生的靜態 IP 範圍對於這兩種產品將是相同的。
如果手動刪除 Pulse 建立的發布,會發生什麼情況?
手動刪除 Pulse 建立的發布會中斷 Pulse 的連線,這可能會導致 預寫日誌 (WAL) 中產生積壓,未處理的變更會累積在其中。這可能會減慢復原和複寫程序,並可能因積壓增長而導致儲存問題。雖然 Pulse 可能會嘗試自動重新建立發布,但最好避免手動刪除由 Pulse 管理的發布。
Pulse 如何處理 Pulse 管理與自行管理的複寫槽?
Pulse 會自動管理它建立的複寫槽。如果 Pulse 管理的槽被停用,Pulse 將重新啟用它。自行管理的槽(由使用者手動建立)完全由使用者控制,Pulse 不會修改它們。
如果我在 Pulse 儀表板上看到資料庫連線問題,我該怎麼辦?
執行以下 SQL 命令,檢查發布是否存在於您的資料庫中
SELECT * FROM pg_replication_slots;
如果發布遺失且並非有意刪除,Pulse 可能會重新建立它。如果問題持續存在,請聯絡支援部門。
我該如何處理大型 WAL 積壓?
大型 WAL 積壓表示 Pulse 無法連線到發布槽。請驗證發布是否存在且處於活動狀態。如果它被刪除或停用,Pulse 可能會重新建立它。對於持續存在的問題,請聯絡支援部門以防止效能問題。
使用者可以手動設定 Prisma Pulse 的複寫槽嗎?
是的,使用者可以手動建立和管理複寫槽。但是,Pulse 不會維護自行管理的槽。為了獲得最佳效能,我們建議使用 Pulse 在初始設定期間設定的槽。
如果我手動設定 walsender_timeout
,會出現問題嗎?
walsender_timeout
設定參數是一個逾時設定,它決定了 WAL sender 程序(用於複寫)在與 WAL receiver 斷線之前,等待 WAL receiver 回應的最長時間。它通常預設為 60 秒。
設定小於 10 秒的值可能會導致 Pulse 的連線問題。
我可以在開發期間將本機資料庫與 Prisma Pulse 一起使用嗎?
Prisma Pulse 需要透過網路存取的資料庫才能正確連線和運作。這表示它無法與 localhost
上本機執行的資料庫搭配使用。
如果您需要公開本機資料庫以進行開發,您可以使用通道工具(例如 ngrok 或類似的解決方案)使其可透過網路存取。但是,請記住,此設定主要用於測試和開發目的,並可能引入額外的安全性風險。
對於生產環境和最佳實務,我們建議使用託管資料庫。