跳到主要内容

常见问题解答

我应该在何时为 Prisma Accelerate 启用静态 IP?

当您的安全设置需要 IP 允许列表,或者您正在实施仅允许来自受信任 IP 访问的防火墙时,请为 Accelerate 启用静态 IP,以确保受控且安全的数据库连接。

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

如何在平台控制台中为 Accelerate 启用静态 IP上了解更多信息。

信息

什么是静态 IP?

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

What is a static IP

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

为什么我有时会看到意外的缓存行为?

当 Accelerate 的缓存观察到来自项目的较高负载时,其性能最佳。许多缓存操作(例如将数据提交到缓存和刷新过时数据)是异步发生的。在对 Accelerate 进行基准测试时,我们建议使用循环或负载测试方法进行。这将更好地模拟更高负载的场景,并减少低频率操作的异常值。

Prisma 操作通过 HTTP 发送到 Accelerate。因此,到 Accelerate 的第一个请求必须建立 HTTP 握手,并且可能因此产生额外的延迟。我们正在探索在未来减少此初始请求延迟的方法。

Accelerate 的定价是多少?

您可以在我们的Accelerate 定价页面上找到更多详细信息

VS Code 无法识别 $extends 方法

如果您将 Accelerate 的 Prisma Client 扩展添加到当前在 VS Code 中打开的现有项目,则编辑器可能不会立即识别 $extends 方法。

这可能是 TypeScript 服务器尚未识别重新生成的 Prisma Client 的问题。要解决此问题,您需要重启 TypeScript。

  1. 在 VS Code 中,打开命令面板。您可以在按 F1 或选择 查看 > 命令面板 时执行此操作。
  2. 输入 typescript,然后选择并运行 TypeScript: Restart TS server 命令。

VS Code 现在应该可以识别 $extends 方法。

Accelerate 的缓存节点在哪些区域可用?

Accelerate 在 Cloudflare 的网络上运行,缓存命中由 Cloudflare 的 300 多个地点提供服务。您可以在此处找到 Accelerate 的缓存节点可用的区域:https://www.cloudflare.com/network/

Accelerate 的连接池在哪些区域可用?

当未指定缓存策略或发生缓存未命中事件时,Prisma Client 查询将通过 Accelerate 的连接池路由。目前,查询可以通过 16 个可用位置中的任何选定区域进行路由。

目前,可用区域列表为

  • 亚太地区,孟买 (ap-south-1)
  • 亚太地区,首尔 (ap-northeast-2)
  • 亚太地区,新加坡 (ap-southeast-1)
  • 亚太地区,悉尼 (ap-southeast-2)
  • 亚太地区,东京 (ap-northeast-1)
  • 加拿大,中部 (ca-central-1)
  • 欧洲,法兰克福 (eu-central-1)
  • 欧洲,爱尔兰 (eu-west-1)
  • 欧洲,伦敦 (eu-west-2)
  • 欧洲,巴黎 (eu-west-3)
  • 欧洲,斯德哥尔摩 (eu-north-1)
  • 南美洲,圣保罗 (sa-east-1)
  • 美国东部,弗吉尼亚州北部 (us-east-1)
  • 美国东部,俄亥俄州 (us-east-2)
  • 美国西部,加利福尼亚州北部 (us-west-1)
  • 美国西部,俄勒冈州 (us-west-2)

您还可以在即将设置 Accelerate 时或通过访问 Prisma 云平台仪表板中 Accelerate 的 设置 选项卡下的 区域 部分来查看可用区域。

Accelerate 如何知道从哪个区域获取缓存?

在底层,Accelerate 使用 Cloudflare,后者使用 任播 进行网络寻址和路由。传入请求将被路由到其网络中最近的、有能力有效处理请求的数据中心或“节点”。要了解有关其工作原理的更多信息,我们建议您研究任播

如何使 Accelerate 上的缓存失效?

如果您使用的是付费计划,则可以通过 $accelerate.invalidate API 按需使缓存失效,或者您可以在项目级别每天最多使整个缓存失效五次。此限制根据您的计划设置。您可以通过 Accelerate 配置页面管理此操作。

Accelerate 的一致性模型是什么?

Accelerate 没有一致性模型。它不是节点需要达成共识的分布式系统(因为数据仅存储在离用户最近的缓存节点中)。但是,Accelerate 缓存节点中缓存的数据不会传播到其他节点,因此 Accelerate 在设计上不需要一致性模型。

Accelerate 实施读取直通缓存策略,特别适合读取密集型工作负载。

缓存提供的数据的新鲜度取决于查询中定义的缓存策略。有关选择适合您查询的正确缓存策略的更多信息,请参阅此部分

Accelerate 与其他缓存工具(如 Redis)有何不同?

  • Accelerate 是一种专用缓存,允许您通过缓存策略在查询级别优化代码中的数据访问。另一方面,Redis 和 Memcached 等工具是通用缓存,旨在具有适应性和灵活性。
  • Accelerate 是一种托管服务,可减少构建和维护缓存服务的时间、风险和工程工作量。
  • 默认情况下,Accelerate 是全局分布式的,从而减少了查询的延迟。其他缓存工具需要额外的配置才能使其在全球范围内可用。

我何时不应使用 Accelerate 的缓存功能?

Accelerate 是一个全局数据缓存和连接池,允许您在查询级别优化代码中的数据访问。虽然使用 Accelerate 进行缓存可以大大提高应用程序的性能,但它可能并不总是您的用例的最佳选择。

如果出现以下情况,Accelerate 的全局缓存功能可能不适合您的应用程序

  • 您的应用程序仅在特定区域内使用,并且您的应用程序服务器和数据库都位于同一网络上的同一区域中。例如,如果您的应用程序服务器和数据库位于同一区域和网络中,则数据库查询可能会快得多。但是,如果您的应用程序服务器与数据库位于不同的区域或网络中,Accelerate 将加快您的查询速度,因为数据将被缓存在离您的应用程序最近的数据中心。

  • 需要通用缓存。Accelerate 是一个连接池和一个专用缓存,仅缓存代码中的数据库查询响应。通用缓存(如 Redis)允许您缓存来自多个来源的数据,例如外部 API,而 Accelerate 目前不支持。如果您对通用缓存感兴趣,请通过我们的Discord与我们分享您的反馈。

  • 您的应用程序数据始终需要在检索时保持最新,这使得难以建立合理的缓存策略。

即使不使用 Accelerate 的全局缓存,您仍然可以通过使用其连接池从 Accelerate 中受益匪浅,尤其是在无服务器或边缘函数中,在这些函数中,管理和扩展数据库连接非常困难。您可以在此处了解有关无服务器挑战的更多信息。

我可以在其他 ORM/查询构建器/驱动程序中使用 Accelerate 吗?

否。我们目前没有任何支持其他 ORM/查询构建器或驱动程序的计划。但是,如果您对支持其他库感兴趣,请随时联系我们,并在我们的 Discord 社区的 #help-and-questions 频道中告知我们。

配置 cacheStrategy 时,ttl 参数的最大允许值是多少?

生存时间 (ttl) 参数可以设置为长达一年。但是,重要的是要注意,如果缓存中的项目不经常访问,则可能会被逐出。

根据我们的实验,我们已经看到缓存项持续存在大约 18 个小时。虽然如果项目被积极访问,它们可能会在缓存中保留更长时间,但不能保证。

注意:即使经常访问的项目也可能会偶尔从缓存中逐出。无论其活动级别如何,项目都不太可能存活一个月或更长时间。

为什么 Accelerate 在服务中断期间不会回退到直接连接字符串?

在极少数发生服务中断的情况下,回退到直接连接将绕过连接池。这可能会耗尽数据库的可用连接,并在数据库级别引起其他问题。

如果发生服务中断,建议在状态页面上进行验证。您可以联系 Prisma 的支持渠道之一以获得帮助。

注意: 此外,值得注意的是,某些边缘函数运行时环境可能不支持与 Prisma ORM 的直接连接。有关更多详细信息,请参阅我们的边缘函数文档

交互式事务中的每个查询是否单独计费?

是的,交互式事务根据事务中的各个操作计费。事务本身的开始、提交或回滚不收费。例如,在以下查询中,有两个可计费的查询

await prisma.$transaction(async (tx) => {
await tx.user.deleteMany({ where: { name: 'John Doe' } });
await tx.user.createMany({ data });
});

但是,当使用 $transaction API 进行顺序客户端操作时,无论数组中有多少个查询,都只算作一个可计费的查询。例如

await prisma.$transaction([
prisma.user.deleteMany({ where: { name: 'John Doe' } }),
prisma.user.createMany({ data }),
]);

如果您不需要交互式事务,则可以使用顺序操作事务来节省成本并提高性能。顺序操作事务在 Accelerate 上表现更好,因为它们在一个往返数据库的过程中执行,而交互式事务则需要单独的往返来进行开始、提交和事务中的每个单独操作。

Accelerate 和 Pulse 的静态 IP 范围是否不同?

否,如果您使用相同的数据库 URL 为 Accelerate 和 Pulse 都启用了静态 IP,则生成的静态 IP 范围对于这两种产品都将相同。

我可以增加 Accelerate 查询持续时间和响应大小限制吗?

是的,您可以根据您的订阅计划增加您的 Accelerate 限制。以下是可配置的限制

限制入门版Pro 计划商务计划
查询超时最多 10 秒最多 20 秒最多 60 秒
交互式事务超时最多 15 秒最多 30 秒最多 90 秒
响应大小最多 5 MB最多 10 MB最多 20 MB

查看定价页面以获取有关可用计划及其相应限制的更多详细信息。

警告

虽然您可以根据您的订阅计划增加这些限制,但仍然建议优化您的数据库操作。在我们的故障排除指南中了解更多信息。

使缓存查询结果失效需要多长时间?

由于需要全局清除缓存,因此很难提供具体的时间范围。但是,缓存的数据最终是一致的,并且通常会在几秒钟内传播到所有 PoP。在极少数情况下,可能需要更长的时间。

使失效重新验证 之间有什么区别?

使失效:缓存条目被删除,并且将在下一个请求中获取新数据,从而导致缓存未命中。这会删除过时数据,但可能会导致响应速度变慢,直到重新填充缓存。

重新验证:主动更新缓存条目,确保下一个请求使用缓存中的最新数据。这使缓存保持有效,并通过避免缓存未命中来保持更快的响应时间。

什么是按需缓存失效?

按需缓存失效 允许应用程序在特定缓存数据发生更改时立即更新它,而不是等待常规缓存刷新周期。这使用户的信息保持准确和最新。

我应该在何时使用缓存失效 API?

当数据一致性无法等待缓存的标准过期或重新验证时,缓存失效 API 至关重要。主要用例包括

  • 内容更新:当发生需要立即可见的关键更改时,例如对已发布的文章、产品更新或个人资料修改的编辑。
  • 库存管理:在实时应用程序(如库存或预订系统)中,库存水平、可用性或预订状态必须反映最新信息。
  • 高优先级数据:对于时间敏感的数据,如突发新闻或紧急通知,用户必须立即看到最新信息。

在这些场景中使用按需缓存失效有助于仅刷新必要的数据,从而保持系统性能,同时确保为用户提供准确、最新的信息。

Accelerate 如何计算查询以进行计费?

Accelerate 在 Prisma Client 调用级别计算查询。单个 Prisma 查询可能会在底层转换为多个 SQL 语句,但对于计费目的,它仅计为一个查询。这确保了直接、可预测的计费,反映了 Prisma Client 的使用情况,而不是底层 SQL 操作的复杂性。

如何从 GitHub 登录切换到电子邮件和密码登录?

如果您之前使用 GitHub 注册,并且想要切换到电子邮件和密码登录,请按照以下步骤操作

1. 验证您的 GitHub 电子邮件地址

  • 检查与您的 GitHub 帐户关联的主要电子邮件地址(例如,从您的 GitHub 个人资料或通知设置)。

2. 创建新的电子邮件/密码帐户

  • 转到电子邮件/密码注册页面。
  • 使用与您的 GitHub 帐户关联的相同电子邮件地址创建新帐户。
  • 我们的系统将自动将您的新电子邮件/密码帐户连接到您的现有数据。

3. 测试您的登录

  • 注销并尝试使用您的电子邮件和您刚刚创建的密码登录。

注意:如果您遇到任何问题,请联系我们的支持团队以获得有关链接您的帐户的帮助。