zoukankan      html  css  js  c++  java
  • 磁盘缓存的算法:写算法

    虽然缓存的最终目的为了提高性能,但缓存写的技术与缓存读的技术有很大的不同。但如果它带来的数据丢失危险很大,那么,就是一个不可接受的方案。因此,安全地将数据保存在非易失存储中是很重要的,因为这样数据就可以长期地保存。虽然读缓存技术用于读操作时可以提高系统性能,但当用于新产生数据的写操作时,却产生了一些有趣的问题。

    目前,用于缓存实现的大部分存储器都是易失型存储器,因此,当断电的时候,所有缓存的数据都将丢失。为了避免这个问题,一种专为缓存而特别设计的存储器已经面世,这种特制的存储器内嵌后备电池,经常用于磁盘子系统,以保证在某一指定时间内供电和数据存储。其他类型的非易失内存也已经生产出来,如闪存,但由于它们价格相对较高、性能较低及使用寿命有限等,通常不被用作缓存内存。

    下面考虑使用L R U的示例,并假定某个应用正在更新数据。由于在缓存中可能存储了过时数据。这里过时数据是指被存储的数据,但不表示最新的版本。当应用修改数据时,过时的数据也必须要修改,无论它存放在哪里—在磁盘上,或者在磁盘和缓存内存里。图显示了两种情况:第一种情况是数据仅存放在磁盘上;第二种情况是数据既存放在磁盘上,也存放在缓存内存中。


    在缓存未命中情况下,缓存控制器决定是否缓存这些数据。对于这个例子,缓存控制器决定放弃缓存关于这个写操作的数据,而把该数据直接写入非易失存储。换言之,数据仅写入磁盘,继续执行下一个操作。

    在缓存命中情况下,缓存控制器可以修改缓存,甚至丢弃缓存,或使缓存内容无效,以致于后来的数据能够覆盖它。假如修改了缓存,必须最终在某个时刻将它写入非易失磁盘存储,但什么时候写呢?可能数据在近期将不被修改,但也可能它成为一个热点,将经历接二连三地、快速的操作。数据写入非易失存储器速度相对较慢,因为必须等待磁盘设备写完成后,才能进行新的写操作,致使系统的性能降低。另一方面,假如数据首先被写进缓存,延迟一段时间后才被写到非易失存储,那么,电源的临时故障就有可能导致数据的丢失。

    解决这个问题基本上采用两种写缓存技术:
    • 透写缓存
    • 回写缓存


    1) 透写缓存

    透写缓存是把数据写入缓存内存后,就立即写入非易失存储器。透写缓存的办法是一种最保守的实现方案,因为基本上它不相信缓存能完成后来的写操作。要是某种原因使缓存系统停止运行,而文件系统或数据库系统却发出写请求,虽然不能获得透写缓存的响应,但它们可以访问磁盘上的数据,重新开始正常的操作。透写缓存既可以把数据镜像到这个缓存,也可以不这样做。假如所写的数据是从缓存装入的数据的更新版本,那么,透写缓存将更新缓存中的信息,或者删除缓存中的数据。

    写缓存的一个重要的特性是:它们必须修改所有存在的数据实例,或者保证丢弃所有原数据的拷贝。假如系统中存在多个版本的数据,就有可能产生错误,最终错误地将数据存放在非易失存储器中。图显示了透写缓存的例子,例子中的透写缓存在更新缓存的同时,将数据写入非易失存储中。


    2) 回写缓存
    回写缓存有时也称为后写缓存,是为了性能缘故而实现的优化。它的基本思路是:为了给应用提供更快的响应,后写缓存首先将几个I / O写操作集中起来,然后一次性地把它们写入非易失存储器,而不是产生一个写请求就执行一个写操作。


    这种写操作组合方法使缓存两侧的成分都能获益。对于产生写操作的主机来说,它比从透写缓存中更快地接收到确认;对设备而言,与单独地执行每个操作相比较,统一的写操作所花费的总时间更少。因此,组合的结果是产生更快的操作。图是一个回写缓存过程,在数据传输到非易失存储器之前,回写缓存组合了几个I / O操作。


    数据库系统的I / O操作是非常频繁的,一般情况下,每秒要执行几千个I / O操作。因此,回写缓存能够提供非常大的性能改善。不仅更快捷地接收到每一个I / O的确认,而且,由于每次的更新数据只对缓存操作即可,而不必对非易失存储实施写,因而,写操作的执行速度也快了许多。

    这样,同样数据块的多次修改只需一次磁盘写操作。清空缓存的过程通常称为刷新缓存。如前所述,回写缓存的潜在问题就是数据丢失。例如,倘若出现某种灾难时,数据却没有刷新到磁盘,而仍然保持在缓存中,那么,数据就要丢失。由于回写缓存算法对上述提及的数据丢失没有采取任何补救措施,因而必须依赖于其他的方法帮助维护数据的一致性。这些方法通常都使用辅助后备电池,保证在灾难出现时,缓存和子系统仍能运行足够长的时间,使缓存得以刷新缓存到非易失存储。

    相关文档下载:

    磁盘缓存专题之一:缓存命中和缓存未命中&缓存与缓冲间的差异.rar

    磁盘缓存专题之二:磁盘缓存的算法:读算法.rar

    磁盘缓存专题之三:磁盘缓存的算法:写算法.rar

    作者:小洋,燕洋天
    出处:http://yanyangtian.cnblogs.com/

    承接架构设计,性能优化(程序,数据库等方面)技术咨询

    高质量干货文章 

  • 相关阅读:
    Sql语句创建表
    刷新、关闭等误操作造成当前页面信息的丢失的解决方案
    asp.net文本框中只允许用户输入数字
    为每个用户创建文件夹,并实现图片上传
    在updatepanel中使用fileupload控件
    解决弹出提示框后字体变大的BUG
    SQL 2005新增的几个函数之学习
    .net实现单张图片的上传
    数据分页
    所谓三门问题
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2650725.html
Copyright © 2011-2022 走看看