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