跳到主要内容

FAQ

Prisma Pulse 支持哪些数据库?

Prisma Pulse 目前支持 PostgreSQL v12 及更高版本。我们很想听听您希望接下来支持哪些数据库

Prisma Pulse 支持哪些数据库提供商?

任何允许您启用逻辑复制的 PostgreSQL 提供商均受支持

提供商StarterProBusinessEnterprise
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() 的订阅者数量为 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 扩展

import { withPulse } from '@prisma/extension-pulse/node';

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,以确保受控且安全的数据库连接。

Result of enabling static IP Pulse with a database using IP allowlisting

平台控制台中了解有关为 Pulse 启用静态 IP 的更多信息

ℹ️ 要在您现有或新的项目环境中为 Accelerate 启用静态 IP 支持,您的工作区需要使用我们的 ProBusiness 计划。查看定价页面以获取更多信息。

信息

什么是静态 IP?

静态 IP 地址是固定的 IPv4 或 IPv6 地址。与可能不可预测地更改的动态 IP 地址不同,来自静态 IP 地址的流量可以轻松识别。

What is a static 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)或类似的解决方案,使其可以通过网络访问。但是,请记住,此设置主要用于测试和开发目的,并且可能会引入额外的安全风险。

对于生产和最佳实践,我们建议使用托管数据库。