分享

介绍

数据库是应用程序性能的关键组件。高性能数据库和低性能数据库之间的区别可能是影响整体应用程序性能的最重要因素。数据库挑战,如查询处理速度、扩展成本和数据访问简易性,使得找到最佳平衡变得困难。很难在众多其他考虑因素中兼顾所有三个因素。

在本文中,我们讨论数据库缓存,这是一种为数据库实现的技术,可以缓解上述一些挑战。我们介绍什么是数据库缓存,在数据存储上实现数据库缓存的好处,以及不同的数据库缓存策略。

什么是数据库缓存?

数据库缓存是一种缓冲技术,将经常查询的数据存储在临时内存中。一个 缓存 是一个高速数据存储层,它存储经常被 读取 请求的数据子集。这个瞬态存储层导致将来对该数据的请求比访问主数据库快。

数据库缓存策略通过减轻主数据库的负担来帮助主数据库。这最常见的情况是将对频繁读取数据的查询重新路由到缓存本身,而不是主数据库。缓存本身驻留在数据库、应用程序中,甚至作为一个独立的访问层。

例如,您的应用程序第一次从数据库请求用户信息,该请求从应用程序服务器到数据库服务器,并返回请求的信息。使用缓存,在初始读取后,该用户资料存储在更靠近请求者的位置,并且所有后续对该数据的读取请求的查询处理时间和数据库工作负载显着减少。

数据库缓存有哪些优势?

数据检索速度极大地影响了应用程序的用户体验。在数据库上实施缓存策略可以提高数据库性能、可用性和可扩展性,而成本最低,具体取决于策略,所有这些因素都有助于总体积极的应用程序体验。

性能

正如前面简要提到的,数据库缓存通过使数据更容易访问来提高数据库性能。缓存充当应用程序用来引用它经常调用的数据的“键盘快捷键”或“热键”。

这种更快的请求可以最大程度地减少数据库的工作负载,使其免于花费大量时间执行重复性任务。而是使这些任务更高效,并简化数据访问。

可用性

虽然不是 100% 的故障转移策略,但缓存也为总体数据库 可用性 提供好处。具体取决于缓存的存储位置,缓存仍然可以为应用程序提供一个位置,以便在主数据库服务器因任何原因不可用时调用数据。

虽然数据库性能通常是采用缓存策略的主要原因,但您还可以额外获得一些在任何后端故障情况下增强弹性的好处。

可扩展性

与提高高可用性类似,数据库缓存对 可扩展性 也有积极的影响。虽然它不应成为您主要的数据库扩展策略考虑因素,但实施缓存以提高数据库性能会减少数据库工作负载,因此将后端查询分布到各个实体。

这种分布减轻了主数据库的负载,可以降低成本并为处理数据提供更多灵活性。此结果消除了扩展的需要,并能更好地利用您现有的资源,从而可能将扩展的需要推迟到将来。

数据库缓存策略有哪些?

在将数据库缓存引入您的数据访问流程之前,重要的是要考虑哪种缓存策略最适合您的工作。对于任何场景,数据库和缓存之间的关系都可能对性能和系统结构产生不同的影响。提前规划并考虑所有选项将减少以后出现问题的可能性。

要考虑的五种最流行的策略是缓存旁路、读穿、写穿、写回和写绕过。我们将介绍每种策略的数据源到缓存的关系和过程。

缓存旁路

缓存旁路方案中,数据库缓存位于数据库旁边。当应用程序请求数据时,它会首先检查缓存。如果缓存中有数据(缓存命中),则会返回数据。如果缓存中没有数据(缓存未命中),则应用程序将查询数据库。然后,应用程序将该数据存储在缓存中,以供后续查询使用。

Cache-Aside

缓存旁路设计是一种通用的缓存策略。此策略对于读密集型工作负载的应用程序特别有用。这将频繁读取的数据保留在手边,以供许多传入的读取请求使用。缓存与数据库分离带来了两个额外的优势。在缓存故障的情况下,依赖缓存数据的系统仍然可以直连数据库。这提供了一些弹性。其次,由于缓存是独立的,它可以采用与数据库不同的数据模型。

另一方面,缓存旁路策略的主要缺点是,数据库存在不一致的窗口。通常,任何要写入的数据都会直接写入数据库。因此,缓存可能与主数据库存在一段时间的不一致。根据您的需要,有不同的缓存策略来解决此问题。

读穿

读穿缓存方案中,缓存位于应用程序和数据库之间。可以想象,它像一条从应用程序到数据库的直线,中间有缓存。在这种策略中,应用程序将始终与缓存进行读取操作,如果发生缓存命中,则会立即返回数据。在缓存未命中的情况下,缓存将从数据库中填充缺少的数据,然后将其返回给应用程序。对于任何数据写入操作,应用程序仍然会直连数据库。

Read-Through

读穿缓存也适用于读密集型工作负载。读穿和缓存旁路之间的主要区别在于,在缓存旁路策略中,应用程序负责获取数据并填充缓存,而在读穿设置中,逻辑由库或一些独立的缓存提供者完成。读穿设置类似于缓存旁路,因为它可能会出现缓存和数据库之间的数据不一致。

读穿缓存策略还有一个缺点,即每次有新的读取请求时,都需要转到数据库获取数据。这些数据以前从未缓存过,因此需要加载数据。开发人员通常通过手动发出可能会发生的查询来“预热”缓存,以缓解这种延迟。

写穿

写穿缓存策略与前面提到的两种策略不同,因为它不会将数据写入数据库,而是会先写入缓存,然后缓存立即写入数据库。该方案仍然可以像读穿策略一样可视化,以应用程序为中心,形成一条直线。

Write-Through

写穿策略的优势在于,可以确保缓存包含任何写入的数据,并且任何新的读取操作都不会在缓存从主数据库请求数据时出现延迟。如果仅采用这种方案,则存在很大的写入延迟缺点,因为操作必须先经过缓存,然后再写入数据库。这应该立即发生,但仍然会发生两个连续的写入操作。

真正的优势来自于将写穿与读穿缓存配对。这种策略将采用所有上述读穿缓存策略的优点,并额外增加消除数据不一致的优势。

写回

写回的工作原理与写穿策略几乎完全相同,只有一个关键细节不同。在写回策略中,应用程序仍然直接写入缓存。但是,缓存不会立即写入数据库,而是会在延迟之后写入。

Write-Back

通过延迟写入数据库,而不是立即写入,可以减少写密集型工作负载下缓存的负担。这使得写回、读穿组合适用于混合工作负载。这种配对可以确保最新写入的数据和访问的数据始终存在,并且可以通过缓存访问。

缓存到数据库写入的延迟可以提高整体写入性能,如果支持批处理,还可以减少整体写入次数。这有可能节省一些成本并降低整体工作负载。但是,在缓存故障的情况下,如果批处理或延迟写入数据库尚未发生,则这种延迟可能会导致数据丢失。

写绕过

写绕过缓存策略将与缓存旁路或读穿组合使用。在这种方案中,数据始终写入数据库,读取的数据进入缓存。如果发生缓存未命中,则应用程序将读取数据库,然后更新缓存以备下次使用。

Write-Around

这种特定策略在数据只写入一次且不更新的情况下,性能最高。数据很少读取或根本不读取。

结论

在本指南中,我们介绍了数据库缓存的概念。我们介绍了配置缓存策略可以给您的数据库和应用程序性能带来的主要优势。我们还讨论了各种缓存策略的基础知识,以及如何可视化和优化这些方案以协同工作。

配置优化缓存和数据库工作负载的缓存策略可以对应用程序的性能、可用性和可扩展性产生重大积极影响。了解从哪里开始以及有哪些选择至关重要。

关于作者
Alex Emerich

Alex Emerich

Alex 是一位典型的观鸟爱好者,喜欢嘻哈音乐的书呆子,也喜欢写关于数据库的文章。他现在住在柏林,可以经常看到他像利奥波德·布鲁姆一样漫无目的地在城市里闲逛。