存储 频道

缓存的更多讨论-磁盘缓存的算法(5)

 
下面考虑使用L R U的示例,并假定某个应用正在更新数据。由于在缓存中可能存储了过时数据。这里过时数据是指被存储的数据,但不表示最新的版本。当应用修改数据时,过时的数据也必须要修改,无论它存放在哪里—在磁盘上,或者在磁盘和缓存内存里。图5 - 1 3显示了两种情况:第一种情况是数据仅存放在磁盘上;第二种情况是数据既存放在磁盘上,也存放在缓存内存中。
 
在缓存未命中情况下,缓存控制器决定是否缓存这些数据。对于这个例子,缓存控制器决定放弃缓存关于这个写操作的数据,而把该数据直接写入非易失存储。换言之,数据仅写入磁盘,继续执行下一个操作。
 
在缓存命中情况下,缓存控制器可以修改缓存,甚至丢弃缓存,或使缓存内容无效,以致于后来的数据能够覆盖它。假如修改了缓存,必须最终在某个时刻将它写入非易失磁盘存储,但什么时候写呢?可能数据在近期将不被修改,但也可能它成为一个热点,将经历接二连三地、快速的操作。数据写入非易失存储器速度相对较慢,因为必须等待磁盘设备写完成后,才能进行新的写操作,致使系统的性能降低。另一方面,假如数据首先被写进缓存,延迟一段时间后才被写到非易失存储,那么,电源的临时故障就有可能导致数据的丢失。
解决这个问题基本上采用两种写缓存技术:
        • 透写缓存。
        • 回写缓存。
 
1)     透写缓存
 
透写缓存是把数据写入缓存内存后,就立即写入非易失存储器。透写缓存的办法是一种最保守的实现方案,因为基本上它不相信缓存能完成后来的写操作。要是某种原因使缓存系统停止运行,而文件系统或数据库系统却发出写请求,虽然不能获得透写缓存的响应,但它们可以访问磁盘上的数据,重新开始正常的操作。透写缓存既可以把数据镜像到这个缓存,也可以不这样做。假如所写的数据是从缓存装入的数据的更新版本,那么,透写缓存将更新缓存中的信息,或者删除缓存中的数据。
 
写缓存的一个重要的特性是:它们必须修改所有存在的数据实例,或者保证丢弃所有原数据的拷贝。假如系统中存在多个版本的数据,就有可能产生错误,最终错误地将数据存放在非易失存储器中。图5 - 1 4显示了透写缓存的例子,例子中的透写缓存在更新缓存的同时,将数据写入非易失存储中。
0
相关文章