2024年5月24日

速度与节省:使用 Prisma Accelerate 缓存数据库查询

深入了解按查询缓存的优势,展示其如何使查询更快、处理流量高峰、最大限度地降低基础设施成本并让您的用户满意。 了解如何轻松实现 Prisma Accelerate 并提高应用性能和节省成本。

The word "caching" with a starburst behind it, showing that it is important.

想象一下:您和您的团队刚刚发布了最新的应用程序 SuperWidget。 每个人都很兴奋,而且您非常确定它会一炮而红……事实也确实如此! SuperWidget 突然被全球各大公司使用。 然而,您很快意识到,流量水平远远超出您的计划,并且您的应用程序开始出现性能下降。

为了解决这个问题,您的团队迅速采取行动。 您深入研究应用程序监控,并意识到应用程序中的几个查询的影响远超预期。 经过一个漫长的夜晚,您的团队实施了多项基础设施改进,最值得注意的是一个强大的缓存层,这减轻了其余基础设施的负载。 SuperWidget 的性能不再受到负面影响,您的新客户对他们的体验感到满意。

那么,您和您的团队可以做得更好吗?

虽然您的团队能力很强,但您最不希望的就是紧急应对和通宵达旦。 该解决方案仍然需要协调一致的努力和大量浪费的工程时间。 相反,您可以使用 Prisma Accelerate 并轻松缓存查询,从而节省时间和挫败感。

为什么您应该缓存数据库查询

正如您在上面的示例中看到的,当您需要减少数据库或应用程序负载时,缓存非常有用。 通过缓存,您可以从加载应用程序所需的时间(也称为“关键路径”)中删除昂贵的操作。 后续请求可以使用此缓存数据,以避免花费应用程序或数据库时间来计算结果。 如果因减少应用程序负载而提高的稳定性还不够,那么减少计算时间也意味着您的基础设施可以支持更高的工作负载,或者您的应用程序可以在减少的硬件上运行,从而为您节省资金!

An image showing a large number of connections going from clients, to a server, to a database. The database is overloaded and stuck at 100% CPU. There is an X's for eyes emoji next to the database.

An image showing a large number of connections going from clients, to a server, through a cache, to a database. Thanks to the cache, the database is not overloaded. There is an emoji with sunglasses next to the database.

缓存的另一个原因是为了降低出口成本。 许多云提供商对离开其服务的数据收取出口成本。 这可能是从数据库中提供的行、静态图像,甚至是与其他服务的响应。

虽然更快的加载时间和降低的成本是缓存的直接好处,但它们带来了另一个好处:改进对您应用程序的感知! 更快的加载时间带来更愉悦的体验和 更快乐的客户。 即使访问者没有付费,加载缓慢的应用程序也可能导致用户最多刷新垃圾邮件,最坏的情况是永久离开。

在考虑是否缓存查询时,您肯定应该记住这三个原因以及其他原因。 幸运的是,Prisma Accelerate 可以提供帮助:Accelerate 具有按查询缓存功能,出口成本极低。 使用 Prisma Accelerate 时,您可以轻松快速地缓存有问题的查询

在第一种情况下,当昂贵或频繁访问的查询可能使数据库不堪重负时,按查询缓存将在数据缓存期间阻止该负载。 如果成本是问题,您的数据将从数据库访问一次,然后缓存在 Accelerate 的全球分布式节点集合中,从而防止进一步数据库读取的额外成本,同时使您的应用程序更快!

何时缓存

现在您已经了解了为什么要缓存以及如何缓存,您可能会想开始缓存每个查询。 在您这样做之前,请注意我们的示例中发生的事情:您和您的团队在实施缓存之前监控了您的应用程序。

缓存很棒,但任何添加都可能产生费用或导致意外的副作用。 在 Prisma,我们是可观察性驱动开发的忠实拥护者:检测您的应用程序并做出明智的决策。 缓存应该是众多选项中经过仔细考虑的选项。 例如,如果您需要某个查询始终包含完全最新的数据,那么缓存可能不是合适的选择。 另一方面,数据不经常更改或不需要最新的情况非常适合。

这并不是说您需要在实施任何类型的缓存之前监控生产流量。 缓存也可以在开发过程中成为一个有用的工具! 如果您的开发环境中进行了自动化测试,并且您看到一个慢查询,请使用 Accelerate 快速缓存该查询并衡量结果。 如果您看到明显的改进,那么缓存可能是一个不错的选择。 无论环境如何,建议仍然相同:测量和基准测试,进行更改,然后再进行测量。

如果您对查询洞察力感兴趣并希望深入优化性能,请查看 Prisma Optimize

Prisma Accelerate 如何提供帮助

正如您在上面看到的,使用 Prisma Accelerate 添加缓存就像向查询添加 cacheStrategy 选项一样简单。 由于使用 Prisma Accelerate 缓存查询是基于每个查询进行的,因此您只需为您缓存的查询付费。 您的应用程序的其余部分继续按原样运行。 只要您确定特定查询需要缓存,您只需几行代码即可添加它!

除了能够快速轻松地实现缓存之外,使用 Prisma Accelerate 还意味着无需设置额外的缓存基础设施。 虽然云提供商拥有托管的键值存储,但在最佳情况下,您仍然需要手动插入数据、管理索引和复制,并确保在发生更改时使其失效。 使用 Prisma Accelerate,这一切都为您处理! 为您要缓存的查询添加缓存策略,然后继续构建更多优秀的功能。

An image with two emoji. On the left is an emoji that looks dizzy and overwhelmed. Surrounding it are a lot of things that you have to think of when managing caching infrastructure: Redis, memcached, indexes, invalidation, in-memory, sharding, AWS, GCP. The emoji on the right is winking, clearly happy. It has two steps above it: 1. find a query to cache. 2. Use the Prisma Accelerate extension's cacheStrategy feature.

Prisma Accelerate 适合我吗?

在研究任何软件时,总是有很多选择。 我们发现 Accelerate 非常适合以下类型的应用程序

  • 静态内容,例如博客文章
  • 复杂查询,例如与计费相关的任务的使用量计算
  • 读取密集型应用程序,例如社交媒体平台、新闻聚合器和电子商务网站

Accelerate 也非常适合希望快速让工程师入职的团队。 由于 Accelerate 提供托管基础设施并内置于 Prisma Client 中,即使是不熟悉您的代码库的新团队成员也可以轻松缓存查询。


Prisma Accelerate 不仅仅是一个缓存! Accelerate 是 边缘分布式 的,并且还处理 连接池。 请务必查看 完整文档

总结

缓存仍然是软件工程的“难题”之一,这是理所当然的! 仅仅缓存更多内容并不能解决问题,团队需要花时间了解可以缓存什么以及它将如何影响他们的产品。

虽然有很多不同的缓存方法,但 Prisma Accelerate 可以轻松地在预查询基础上实现缓存,并让您有更多时间专注于构建优秀的产品。 如果您想更进一步,请了解更多关于 Accelerate 的信息,并立即开始缓存您的 Prisma ORM 查询。



开始使用 Accelerate 缓存

不要错过下一篇文章!

注册 Prisma 新闻通讯