简介
数据库是应用程序性能的关键组件。高性能和低性能数据库之间的差异可能是影响整体应用程序性能的最重要因素。数据库面临查询处理速度、扩展成本和数据访问便利性等挑战,这使得找到优化平衡变得困难。在诸多考虑因素中,要同时兼顾这三点是很难的。
在本文中,我们将讨论数据库缓存,这是一种为数据库实施的技术,旨在缓解上述部分挑战。我们将介绍什么是数据库缓存,在数据存储上实施数据库缓存的好处,以及不同的数据库缓存策略。
请查看Prisma Data Platform,在一个地方管理您的所有应用程序数据。
什么是数据库缓存?
数据库缓存是一种缓冲技术,它将频繁查询的数据存储在临时内存中。缓存是一个高速数据存储层,用于存储经常读取请求的数据子集。这个瞬态存储层使得将来对这些数据的请求能够比访问主数据库更快地得到服务。
数据库缓存策略通过减轻主数据库可能承受的负担来辅助它。这最常见于将频繁读取数据的查询重新路由到缓存本身,而不是主数据库。缓存本身驻留在数据库、应用程序,甚至作为一个独立的访问层。
例如,您的应用程序首次从数据库请求用户信息,此请求从应用服务器发送到数据库服务器并返回请求的信息。通过缓存,此用户配置文件在首次读取后存储在更靠近请求者的位置,并且所有后续对此数据的读取请求的查询处理时间和数据库工作负载都显著减少。
数据库缓存有哪些好处?
数据检索速度极大地影响应用程序的用户体验。根据策略,在数据库上实施缓存策略可以以最小的成本带来改进的数据库性能、可用性和可扩展性,所有这些因素都促成了积极的整体应用程序体验。
性能
正如前面简要提及的,数据库缓存通过使数据更容易访问来提高数据库的性能。缓存就像应用程序引用它频繁调用的数据的一种“键盘快捷方式”或“热键”。
这种更快的请求可以最大限度地减少数据库的工作负载,使其避免花费低效的时间来执行重复性任务。相反,这使得这些任务更高效并简化了数据访问。
可用性
虽然不是100%的故障转移策略,但缓存也为整体数据库可用性提供了好处。根据缓存的存储位置,如果主数据库服务器因任何原因变得不可用,缓存仍然可以为应用程序提供一个调用数据的地方。
虽然数据库性能通常是采用缓存策略的主要原因,但您还可以获得在后端发生任何故障时额外的一些弹性。
可扩展性
与增加高可用性类似,数据库缓存对可扩展性具有积极影响。虽然这不应该是您数据库扩展策略的主要考虑因素,但实施缓存以提高数据库性能可以减少您的数据库工作负载,从而将后端查询分发到不同的实体。
这种分布减轻了主数据库的负载,可以降低成本并为您的数据处理提供更大的灵活性。这个结果减轻了扩展的需要,并且利用您现有资源做更多的事情,可能会将扩展的需要推迟到未来。
数据库缓存策略有哪些不同类型?
在将数据库缓存引入您的数据访问流程之前,考虑哪种缓存策略最适合这项工作至关重要。对于任何场景,数据库和缓存之间的关系都可能对性能和系统结构产生不同的影响。提前规划并考虑所有选项将减少未来的麻烦。
最流行的五种策略是:旁路缓存(cache-aside)、读穿缓存(read-through)、写穿缓存(write-through)、回写缓存(write-back)和写绕缓存(write-around)。我们将介绍每种策略的数据源到缓存的关系和过程。
旁路缓存
在旁路缓存安排中,数据库缓存位于数据库旁边。当应用程序请求数据时,它会首先检查缓存。如果缓存有数据(缓存命中),则返回数据。如果缓存没有数据(缓存未命中),则应用程序将查询数据库。然后应用程序将该数据存储在缓存中,以备后续查询使用。
旁路缓存设计是一种通用的缓存策略。这种策略对于读密集型工作负载的应用程序特别有用。它将经常读取的数据放在手边,以应对许多传入的读取请求。缓存与数据库分离还带来了两个额外的好处。在缓存失败的情况下,依赖缓存数据的系统仍然可以直接访问数据库。这提供了一定的弹性。其次,由于缓存是分离的,它可以采用与数据库不同的数据模型。
另一方面,旁路缓存策略的主要缺点是数据库存在不一致的风险。通常,任何写入的数据都将直接进入数据库。因此,缓存可能会与主数据库存在一段时间的不一致。根据您的需求,有不同的缓存策略可以解决这个问题。
读穿缓存
在读穿缓存安排中,缓存位于应用程序和数据库之间。可以将其设想为从应用程序到数据库的一条直线,缓存位于中间。在此策略中,应用程序将始终与缓存进行读取通信,当缓存命中时,数据会立即返回。如果缓存未命中,缓存将从数据库填充缺失的数据,然后将其返回给应用程序。对于任何数据写入,应用程序仍将直接访问数据库。
读穿缓存也适用于读密集型工作负载。读穿缓存和旁路缓存的主要区别在于,在旁路缓存策略中,应用程序负责获取数据并填充缓存,而在读穿缓存设置中,逻辑由库或某个独立的缓存提供程序完成。读穿缓存设置与旁路缓存类似,在缓存和数据库之间可能存在数据不一致。
读穿缓存策略还有一个缺点,就是每次有新的读取请求进来时,都需要访问数据库获取数据。这些数据以前从未被缓存过,因此需要加载。开发者通常通过手动发出可能发生的查询来“预热”缓存,以缓解这种延迟。
写穿缓存
写穿缓存策略与前面提到的两种策略不同,因为它不是将数据写入数据库,而是首先写入缓存,然后缓存立即写入数据库。这种安排仍然可以像读穿策略一样可视化,应用程序在中间呈一条直线。
写穿策略的好处是缓存保证拥有任何写入的数据,并且新的读取不会在缓存从主数据库请求数据时遇到延迟。如果仅仅采用这种安排,会有一个很大的缺点,那就是额外的写入延迟,因为操作必须先到缓存,然后再到数据库。这应该立即发生,但仍然会连续发生两次写入。
真正的优势来自于将写穿缓存与读穿缓存配对使用。这种策略将采用读穿缓存策略的所有上述优点,并额外受益于消除了数据不一致的可能性。
回写缓存
回写几乎与写穿策略完全相同,除了一个关键细节。在回写策略中,应用程序再次直接写入缓存。但是,缓存不会立即写入数据库,而是延迟写入。
通过延迟写入数据库而不是立即写入,在高写入工作负载下缓存的压力会减轻。这使得回写和读穿的组合适用于混合工作负载。这种配对确保了最近写入和访问的数据始终存在并可通过缓存访问。
缓存到数据库写入的延迟可以提高整体写入性能,如果支持批量处理,还可以减少整体写入次数。这为节省成本和减少整体工作负载提供了潜力。但是,在缓存故障的情况下,如果批处理或延迟写入数据库尚未发生,这种延迟可能会导致数据丢失。
写绕缓存
写绕缓存策略将与旁路缓存或读穿缓存结合使用。在此安排中,数据始终写入数据库,而读取的数据则进入缓存。如果缓存未命中,应用程序将读取数据库,然后更新缓存以备下次使用。
这种特殊策略在数据只写入一次且不更新的情况下性能最佳。数据很少被读取或根本不被读取。
结论
在本指南中,我们介绍了数据库缓存的概念。我们讨论了配置缓存策略对您的数据库和应用程序性能所能带来的主要好处。我们还讨论了各种缓存策略的基础知识,以及如何可视化和优化这些安排以协同工作。
配置一个优化缓存和数据库工作负载的缓存策略,可以对应用程序的性能、可用性和可扩展性产生重大的积极影响。了解从何开始以及有哪些选项至关重要。
请查看Prisma Data Platform,在一个地方管理您的所有应用程序数据。





