首页 > 数据库 >数据库缓存策略

数据库缓存策略

时间:2024-01-23 17:27:04浏览次数:57  
标签:缓存 策略 数据库 写入 应用程序 数据 读取

数据库缓存策略

以下是数据库与缓存的五种常见策略。

1缓存旁路

  • 缓存旁路(Cache-Aside)
    • 在缓存旁路策略中,数据库缓存位于数据库旁边。
    • 当应用程序请求数据时,它会首先检查缓存
      • 如果缓存中存在数据(缓存命中),则会直接返回数据
      • 如果缓存中没有数据(缓存未命中),则应用程序将查询数据库,然后将数据存储在缓存中,并将其返回给应用程序,以供后续的查询使用。
    • 缓存旁路设计是一种优秀的通用缓存策略
      • 这种策略特别适用于读取密集的工作负载的应用程序
      • 它将经常读取的数据保持在附近,以满足众多的读取请求
    • 将缓存和数据库分开还带来了两个额外的好处
      • 在缓存出现故障的情况下,仍然可以从数据库中读取数据,从而增加了一定的弹性
      • 由于缓存与数据库分离,因此可以独立扩展缓存和数据库,从而提高了整个系统的可伸缩性
    • 注意
      • 缓存旁路策略主要缺点是数据库中的不一致性问题
        • 当应用程序更新数据库中的数据时,缓存中的数据将过时
        • 为了解决这个问题,我们可以使用缓存失效策略
      • 对于任何数据的写入操作,应用程序仍然会直接访问数据库

2读取穿透

  • 读取穿透(Read-Through)
    • 在读取穿透缓存的策略中,缓存位于应用程序和数据库之间
    • 在这种策略下,应用程序总是与缓存进行读取交互
      • 当缓存命中时,数据会立即返回
      • 当缓存未命中时,缓存会从数据库中获取缺失的数据,然后将其返回给应用程序
    • 对于任何数据的写入操作,应用程序仍然会直接访问数据库

3写入穿透

  • 写入穿透(Write-Through)
    • 写入穿透缓存策略不是直接将数据写入数据库,而是首先将数据写入缓存,然后缓存立即将数据写入数据库
  • 写入穿透策略的好处在于,确保缓存中具有所有写入的数据,并且任何新的读取请求不会因为缓存从主数据库请求数据而遇到延迟。如果仅采用这种安排,缺点是会产生额外的写入延迟,因为操作必须经过缓存然后再写入数据库。尽管这应该是立即发生的,但仍然存在两次连续写入的情况。
  • 真正的好处来自于将写入穿透与读取穿透缓存配对使用的策略。这种策略将采用读取穿透缓存策略的所有优点,并增加了消除数据不一致的潜在优势。通过使用这种组合策略,可以实现写入数据的高效缓存和读取数据的快速访问,同时保持数据的一致性。

4写入回写

  • 写入回写(Write-Back)
    • 与写入穿透策略几乎完全相同,只有一个关键细节不同。在写回策略中,应用程序再次直接将数据写入缓存。然而,缓存不会立即将数据写入数据库,而是会延迟一段时间后再进行写入。
    • 通过在写入数据库时延迟而不是立即进行,可以减轻写入密集工作负载对缓存的压力。这使得写回和读取穿透的组合对于混合工作负载非常适用。这种组合确保最近写入的数据和访问的数据始终存在,并可通过缓存进行访问
    • 缓存到数据库写入的延迟可以改善整体写入性能,并且如果支持批处理,则可以减少总体写入量。这为一些成本节约和整体工作负载减轻带来了潜在的机会。然而,在缓存发生故障的情况下,这种延迟可能会导致可能数据丢失的风险,特别是如果批处理或延迟写入数据库尚未发生。
    • 写回策略的另一个缺点是,如果缓存发生故障,那么缓存中的数据可能会丢失。这种情况下,数据库中的数据将是最新的,但是缓存中的数据将是过时的。这种情况下,应用程序将无法从缓存中读取数据,直到缓存恢复正常为止。

5写入旁路

  • 写入旁路(Write-Around)
    • 写入旁路缓存策略将与缓存旁路或读取穿透缓存策略相结合
    • 在这种情况下,数据总是被写入数据库,而读取的数据会被放入缓存
    • 如果发生缓存未命中,则应用程序会从数据库读取数据,然后更新缓存以备下次使用
  • 这种特定的策略在数据仅被写入一次且不进行更新的情况下表现最佳。数据很少被读取或根本不被读取。

标签:缓存,策略,数据库,写入,应用程序,数据,读取
From: https://www.cnblogs.com/atwood-pan/p/17982926

相关文章

  • 策略模式
    if...else...的优雅写法,可以配合委托模式一起使用定义:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户补充定义:处理大量if...else...代码类型:行为型适用场景:系统有很多类,而他们的区别仅仅在于他们的行为策略不同一个系统需......
  • 火山引擎ByteHouse:“专用向量数据库”与“数据库+向量扩展”,怎么选?
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群背景随着LLM(LargeLanguageModel)的不断发展,向量检索也逐渐成为关注的焦点。LLM通过处理大量的文本数据,获取丰富的语义信息,从而能够更好地理解和生成自然语言。然而,LLM的输出通常是一系列概......
  • MySQL密码过期策略
    如果要设置密码永不过期的全局策略,可以这样:(注意这是默认值,配置文件中可以不声明)[mysqld]default_password_lifetime=0禁用密码过期:ALTERUSER'testuser'@'localhost'PASSWORDEXPIRENEVER;......
  • [转帖]Oracle Exadata X10M 数据库一体机发布,树立 OLTP 数据库性能新标杆
    https://www.modb.pro/db/653936 2023年6月25日消息,Oracle公司继续以其专用的Exadata平台重新定义OLTP数据库性能。上周,该公司延续了这一传统,推出了第十二个Exadata平台,即OracleExadataX10M数据库一体机。X10M的设计目的只有一件事:比市场上任何其他产品更......
  • 安装数据库Sql Server 12版本评估版过期后,如何卸载?以及如何安装Sql Server2019版本。
        昨晚由于之前实施的一个小姑娘把我们数据安装的版本装成评估版,导致数据库任务无法每天正常备份作业。然后我就开始了踩坑之路。幸好在晚上操作的,如果在白天,想都不敢想。心想着升级后会好,结果升级后打都打不开,数据库直接无法访问。那就重新下一个安装,但是装好后,无法......
  • 数据库优化---空间换时间优化
       在查询优化中,有一个重要的概念:空间换取查询时间     这一理论最好的应用就是:数据仓库(OLAP):在海量数据库里(一般是TB级)分析数据,通过对数据的ETL和计算汇总,得到有用的数据,并通过不同维度查看统计数据(一般比较少),实现上钻和下钻分析数据。   现在讨论一下在OLTP系统中空间......
  • 数据库系统优化--业务逻辑设计优化
         当我们优化一个系统时,有时发现一种情况就是自己修改SQL,索引以及分区是不能解决性能问题的。这时你要考虑业务逻辑优化和表设计的重构。这两点的确和设计结合的很紧密。 业务逻辑优化     结合实际,我们先谈谈业务逻辑优化。     案例一:         我......
  • 数据库重构(一):字段合并
    刚到公司不久,才知道公司产品在性能上有问题,数据量和并发数一大,系统就很慢,需要优化。在和公司技术同事讨论某模块优化,通过sql无法优化,因为系统sql是判断5个纬度,一个用户id,一个机构id,一个岗位id,还有级别判断和是否公共。     刚到公司不久,才知道公......
  • MySQL数据库开发规范-EC
    最近一段时间一边在线上抓取SQL来优化,一边在整理这个开发规范,尽量减少新的问题SQL进入生产库。今天也是对公司的开发做了一次培训,PPT就不放上来了,里面有十来个生产SQL的案例。因为规范大部分还是具有通用性,所以也借鉴了像去哪儿和赶集的规范,但实际在撰写本文的过程中,每一条规范的背......
  • 历史SQL性能监控导致数据库出现大量latch free
    数据库版本:19.10RAC操作系统:redhat7.6最近收到数据库大量latchfree告警,结合最近后台同步数据以及地市访问较为频繁,起初认为是正常现象,可后来告警实在是频繁,登录数据库分析了下大概情况通过latchfree:P2值查看具体的latch名称--这里看到是real-timedescriptorlatch,之前没......