写缓存属性查询

在写数据前,存储驱动程序缓冲数据到非易失性媒介,如磁盘盘片。这一类型缓冲改进了设备性能,但是也降低了数据完整性。如果写缓存没有电压备份,电源关闭可能导致缓冲数据丢失。

一个弥补数据丢失问题的方法是刷新写缓存(在SCSI设备上使用SCSI SYNCHRONIZE CACHE命令)。然而,刷新写缓存是昂贵的操作,如果频繁操作,它可能会显著的降低性能。取代刷新写缓存的方法,许多存储设备允许write-through请求。Write-through请求绕开写缓存而直接送数据到媒介。

例如,数据库应用程序可能使用write-through请求以确保事务处理日志到媒介,文件系统驱动程序能使用write-through请求以确保文件系统元数据到达媒介。

然而,并非所有的存储驱动具有写缓存支持write-through请求或是SYNCHRONIZE CACHE;一些设备不需要绕过或刷新缓存数据,因为这些设备有电池备份系统以阻止电源丢失时数据损坏。应用程序和驱动程序,在他们有效使用设备之前,必须获取设备写缓存的属性信息。

Windows Vista中,你可以使用包含一StorageDeviceWriteCacheProperty 属性标示符的IOCTL_STORAGE_QUERY_PROPERTY请求来查询存储类型驱动的写缓存属性——指定了设备的写缓存特征。写缓存属性包含设备缓存能力的如下信息:

l         写缓存的存在。写缓存属性指定了设备是否包含些缓存。

l         写缓存的类型。主要存在两种写缓存:回写(write back)和直写(write through)。具有回写缓存的设备,除非不得己,不会拷贝缓冲数据。具有直写缓存的设备并行地写数据到缓存和媒介中。这并非可以改善写性能,但是可以是子请求读操作更快。

不要迷惑于直写缓存和直写请求。直写请求可以使用任意种类缓存,包括胡写缓存,如果设备支持直写请求。例如,假设目标是一个具有回写缓存的SCSI设备,如果设备支持直写请求,启动程序可以通过设置命令描述块(CDB)中写命令强制单元访问位(FUA),绕开写缓存

l         同步缓存支持。写缓存属性显示了设备是否支持SCSI SYNC CACHE命令,或其它总线上相当的命令。

l         电压备份。写缓存属性只是了设备是否具有在电源关闭时保持缓存数据完整性的电压备份。

关于报告写缓存属性的完整描述信息,请参考STORAGE_WRITE_CACHE_PROPERTY.

如果没有写缓存属性机制(也就是,使用StorageDeviceWriteCacheProperty 属性标示符的IOCTL_STORAGE_QUERY_PROPERTY请求),应用程序和驱动程序,必须通过不同的命令序列,为每一总线查询设备写缓存特征。例如,如果目标设备绑定于IEEE1394总线,使用精简块命令(RBC)协议,启动程序必须检索设备模式数据中的页6来确定写缓存是否使能。然而如果设备是SCSI兼容的,启动程序必须检索模式数据中的页8.写缓存机制隐藏了这些操作细节,并提供了查询存储设备写缓存属性的方法,这与不同总线的方法相同。

写缓存属性机制在RAID设备上不支持,因为没有标准的方法查询这些设备,在闪存设备上也不支持。

写缓存属性在64Windows版本上支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis提供了查询缓存来减少数据库访问次数,提高性能。查询缓存是将查询结果缓存起来,当下次相同的查询被执行时,直接从缓存中获取结果,而不再访问数据库。 要启用查询缓存,需要在MyBatis配置文件中进行相关配置。以下是一些相关的配置选项: 1. `<setting name="cacheEnabled" value="true" />`:开启全局的二级缓存,默认为true。 2. `<mapper namespace="com.example.mapper" flushCache="true">`:在mapper中配置flushCache属性为true,表示刷新缓存,使其失效。 3. `<select id="selectUser" resultType="com.example.User" useCache="true">`:在查询语句中配置useCache属性为true,表示使用查询缓存。 默认情况下,MyBatis使用PerpetualCache作为二级缓存的实现,它是一个基于HashMap的缓存实现。MyBatis还支持其他的缓存实现,如Ehcache、Redis等。 需要注意的是,查询缓存是基于查询语句的完全匹配来判断是否使用缓存的。如果有任何一个参数发生变化,即使是相同的SQL语句,也会重新查询数据库而不使用缓存。 另外,MyBatis还提供了一级缓存,默认开启且无法关闭。一级缓存是基于SqlSession的,它的生命周期与SqlSession的生命周期一致,可以通过清除缓存的方式来使其失效。 总的来说,MyBatis的查询缓存是一个简单但有效的机制,可以显著提高查询性能,减少数据库访问次数。但需要注意合理配置缓存策略,避免缓存过期或占用过多内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值