跳至主要内容

Accelerate 常见问题

我何时应该为 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 方法

如果您将 Prisma Client Accelerate 扩展添加到当前在 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 Cloud Platform 仪表板中 Accelerate 的设置选项卡下的区域部分来查看可用区域。

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

在底层,Accelerate 使用 Cloudflare,它通过 Anycast 进行网络寻址和路由。传入的请求将被路由到其网络中最近的、有能力高效处理请求的数据中心或“节点”。要了解更多关于其工作原理,我们建议查阅 Anycast

如何在 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,尤其是在无服务器或边缘函数中,管理和扩展数据库连接很困难。您可以在这里了解更多关于无服务器挑战的信息。

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

不能。我们目前没有支持其他 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 查询持续时间和响应大小限制吗?

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

限制免费版入门版专业计划商业计划
查询超时最长 10 秒最长 10 秒最长 20 秒最长 60 秒
交互式事务超时最长 15 秒最长 15 秒最长 30 秒最长 90 秒
响应大小最大 5 MB最大 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. 测试您的登录

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

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

© . This site is unofficial and not affiliated with Prisma Data, Inc.