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 新闻通讯

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