三种基本类型的缓存:绕写式(write-around),直写式(write-through)和回写式(write-back)。

绕写式(write-around)缓存意味着所有数据首先被写入到硬盘区,当它成为合格的后,再基于读操作将它复制(注意不是移动)到闪存区。这意味着数据总是驻留在硬盘层,通常由RAID或镜像功能进行数据保护。其结果是,缓存区的闪存并不需要像上述分层模型中所要求的高可靠性。此外,由于所有数据首先被写入硬盘,闪存的使用寿命应该会延长。只有真正值得闪存“缓存”的数据才会被写到闪存。

需要注意的是,虽然闪存区的故障并不意味着数据丢失,却意味着性能损失,因为所有的后续I / O都必须从硬盘区发起。已经习惯了闪存性能的用户可能会认为性能的下降和宕机一样糟糕。

绕写式缓存技术也意味着所有数据在升级到闪存区之前都需要确保合格。所以在这个模型中,写操作将会一直缓慢,并直到有足够的I / O访问该数据以证明它确实值得复制到闪存中,这时闪存的高性能才会反映出来。最后,数据复制过程需要数据所在的存储控制器进行处理,以及I / O带宽,这可能会造成一些不可预测的系统问题,因为数据被复制到了闪存。

直写式高速缓存(write-through)试图解决一些绕写式缓存面对的挑战。在该模型中,所有写操作都被送到闪存和硬盘层。这样做的结果是,数据冗余地存在于两个层次。该技术确保最活跃的数据预先放置到闪存之上,所以就没有必要再审核数据升级资格并进行复制。写操作性能仍然依赖于硬盘区,因为写确认必须出自该层。此外,闪存耐用性会减小,因为现在所有数据都会存到闪存,而不只是那些获得升级资格的。

回写式高速缓存(write-back)通过在数据写入闪存区后即回复写确认,从而提高了写操作性能。这些数据将会在后来存储I / O不太繁忙的时候再写入到硬盘层。回写式缓存的风险是在数据被写入硬盘之前闪存发生故障。此外,在像VMware那样的集群环境中,在进行虚拟机迁移时,需要格外小心确保闪存区在迁移之前必须清空。

和分层机制一样,回写式缓存对闪存区高可用性的要求也愈加严格,因为有时候闪存里容纳的是数据的唯一副本。

zz fromhttp://www.searchstorage.com.cn/showcontent_88537.htm

zz存储系统中缓存的三种类型的更多相关文章

  1. C++ Primer学习笔记(三) C++中函数是一种类型!!!

    C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...

  2. 云计算服务的三种类型(SaaS、PaaS、IaaS)

    云计算可以帮助企业降低IT方面的成本和复杂性,并获得他们蓬勃发展所需的灵活性与敏捷性.但是,规划出通往云的明确路径并非易事.毕竟用户需要看透与云相关的市场大肆宣传,然后理解并分析不同种类的云计算模式的 ...

  3. hibernate(二)一级缓存和三种状态解析

    序言 前一篇文章知道了什么是hibernate,并且创建了第一个hibernate工程,今天就来先谈谈hibernate的一级缓存和它的三种状态,先要对着两个有一个深刻的了解,才能对后面我要讲解的一对 ...

  4. 链路层三种类型的MAC地址

    若需要转载,请注明出处. 我们知道,链路层都是以MAC地址来进行通信双方的地址标识的,如下图:在应用中根据接收方的多寡来进行划分,可分为以下三种: 单播(Unicast) 多播(Multicast) ...

  5. Hibernate学习(二)———— 一级缓存和三种状态解析

    一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过session来对要操作的对象取得关联,然后在进行操作,那么具体的过程是什么样的呢? 1.首先sessi ...

  6. c++中new的三种用法详细解析

    转载至: http://www.jb51.net/article/41524.htm 以下的是对c++中new的三种使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 一. ...

  7. 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)

    开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库 ...

  8. ASP.NET 设计模式分为三种类型

    设计模式分为三种类型,共23类.  一.创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式.      二.结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代 ...

  9. hibernate - 一级缓存和三种状态解析

    转载自:http://www.cnblogs.com/whgk/p/6103038.html 一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过sessi ...

随机推荐

  1. ACM2026

    /* 首字母变大写 Problem Description 输入一个英文句子,将每个单词的第一个字母改成大写字母.   Input 输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句 ...

  2. angularjs 中ie兼容性的问题收集

    今天在项目中做ie8的兼容的时候,发现angularjs中一些内容这样写有问题,那样写就没有问题了,自己记录一下内容: 如果遇到了ie8中使用$http.post请求不到数据的时候,以下的方法是获取不 ...

  3. Visual Studio C++ Command Line

    最近在Visual Studio 2012进行vp8的开发,之前一直都是在ubuntu上进行开发,关于编译链接的一些选项可直接在makefile中定义,比如vp8的头文件都放在include文件下面, ...

  4. android AudioRecord 与 AudioTrack的录音加回放的使用

    http://stackoverflow.com/questions/32682952/audiotrack-audiotack-not-playing-fully-recorded-audio

  5. ios 对象的集合类(collection classes)

    当你着手为你的应用编写代码的时候,你会发现有许多可供使用的Objective-C的框架类,其中尤其重要的就是基础框架类,它为平台所有的应用提供基础服务.基础框架类中包括了表示字符串和数字等基本数据类型 ...

  6. 转载有个小孩跟我说LINQ(重点讲述Linq中GroupBy的原理及用法)

    转载原出处: http://www.cnblogs.com/AaronYang/archive/2013/04/02/2994635.html 小孩LINQ系列导航:(一)(二)(三)(四)(五)(六 ...

  7. iOS动画详解(二)

    UIImage常用的绘图操作   一个UIImage对象提供了向当前上下文绘制自身的方法.我们现在已经知道如何获取一个图片类型的上下文并将它转变成当前上下文.   平移操作:下面的代码展示了如何将UI ...

  8. MongoDB命令学习

    mongodb不像关系型数据库有很强大的GUI客户端,虽然mongodb也有,但功能和稳定性实在不敢恭维,所以操作mongodb我们大部分 都是用类似cmd命令的方式(mongodb称为shell操作 ...

  9. multiselect获取选中的多个下拉项的值(逗号分割的字符串)

    /*传入下拉select标签*/ function get_selected(mslt_employees) { var emplo =mslt_employees.multiselect(" ...

  10. PHP strlen() 函数

    定义和用法 strlen() 函数返回字符串的长度. 语法 strlen(string) 参数 描述 string 必需.规定要检查的字符串. 例子 <?php echo strlen(&quo ...