FAQ
Prisma Pulse 支持哪些数据库?
Prisma Pulse 目前支持 PostgreSQL v12 及更高版本。我们很想听听您希望接下来支持哪些数据库。
Prisma Pulse 支持哪些数据库提供商?
任何允许您启用逻辑复制的 PostgreSQL 提供商均受支持
提供商 | Starter | Pro | Business | Enterprise |
---|---|---|---|---|
Railway | ✅ | ✅ | ✅ | ✅ |
Supabase | ✅ | ✅ | ✅ | ✅ |
Neon | ❌ | ✅ | ✅ | ✅ |
AWS RDS | ✅ | ✅ | ✅ | ✅ |
请注意,由于 Neon 不提供超级用户数据库访问权限,因此您无法在 Starter 计划中使用 Neon 托管的数据库。
Pulse 会存储我的数据库事件吗?
如果您在控制台中通过项目启用事件持久化功能,Pulse 将持久化数据库事件。这使您可以使用 stream()
API 并利用交付保证。
持久化事件如何影响定价?
如果您为项目启用事件持久化,Pulse 将以与交付形状相同的形式存储数据库中发生的事件。
API 的使用量根据以下因素计费
- 数据库事件:Pulse捕获的数据库事件数量
- 事件读取:Pulse 通过
.stream()
读取和交付的数据库事件数量 - 事件存储:存储事件消耗的磁盘空间量(GiB 为单位)
即使我不通过 name
使用命名流,事件持久化也会向我收费吗?
是的。如果您在项目中启用事件持久化,您的数据库事件将被持久化,您也将因此被收费。
有多少个 Prisma Client 实例可以订阅数据库事件?
通过 Prisma Pulse 订阅的 Prisma Client 实例数量有以下限制
stream()
的订阅者数量为 1000subscribe()
的订阅者数量为 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 支持,您的工作区需要使用我们的 Pro 或 Business 计划。查看定价页面以获取更多信息。
什么是静态 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 发送程序进程(用于复制)在断开连接之前等待 WAL 接收程序响应的最长时间。它通常默认为 60 秒。
设置小于 10 秒的值可能会导致 Pulse 的连接问题。
在开发期间,我可以使用本地数据库与 Prisma Pulse 吗?
Prisma Pulse 需要可通过网络访问的数据库才能连接并正常运行。这意味着它不适用于 localhost
上本地运行的数据库。
如果您需要在开发目的下公开本地数据库,您可以使用隧道工具(如 ngrok)或类似的解决方案,使其可以通过网络访问。但是,请记住,此设置主要用于测试和开发目的,并且可能会引入额外的安全风险。
对于生产和最佳实践,我们建议使用托管数据库。