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

了解更多关于如何在平台控制台中为 Accelerate 启用静态 IP。
什么是静态 IP?
静态 IP 地址是固定的 IPv4 或 IPv6 地址。与可能不可预测变化的动态 IP 地址不同,来自静态 IP 地址的流量可以很容易识别。

ℹ️ 要在您现有或新的项目环境中为 Accelerate 启用静态 IP 支持,您的工作区需要使用我们的 Pro 或 Business 计划。请查看定价页面了解更多信息。
为什么我有时会看到意外的缓存行为?
当项目负载较高时,Accelerate 的缓存性能最佳。许多缓存操作,例如将数据提交到缓存和刷新过期数据,都是异步发生的。在对 Accelerate 进行基准测试时,我们建议使用循环或负载测试方法。这将更好地模拟高负载场景并减少低频操作的异常值。
Prisma 操作通过 HTTP 发送到 Accelerate。因此,第一个发送到 Accelerate 的请求必须建立 HTTP 握手,并可能因此产生额外的延迟。我们正在探索未来减少这种初始请求延迟的方法。
Accelerate 的定价是多少?
您可以在我们的Accelerate 定价页面找到更多详细信息
VS Code 无法识别 $extends 方法
如果您将 Prisma Client Accelerate 扩展添加到当前在 VS Code 中打开的现有项目,编辑器可能无法立即识别 $extends 方法。
这可能是 TypeScript 服务器尚未识别重新生成的 Prisma Client 的问题。要解决此问题,您需要重新启动 TypeScript。
- 在 VS Code 中,打开命令面板。您可以按 F1 或选择视图 > 命令面板来执行此操作。
- 输入
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. 测试您的登录
- 退出并尝试使用您的电子邮件和您刚刚创建的密码登录。
注意:如果您遇到任何问题,请联系我们的支持团队以获取帮助链接您的帐户。