数据文件的DIO
2013-10-19 12:56
316 查看
如大家现在知道的,数据库系统一般都是在操作系统之上去运行的,因此,与底层的硬件是有着一层隔离的。但是对于数据库系统来说,我们并希望通过操作系统的错误而导致数据库的错误产生,因此,我们希望数据库对磁盘的操作是直接进行读写的,这种读写,我们称作DIO,也就是直接IO机制。
首先来看一下,普通的通常情况下的文件IO,此时呢,读写文件会借助于操作系统的文件缓冲区,这样能够减少磁盘的读写次数,一是缩短了时间,二是延长了磁盘的使用寿命,三是增快的文件的读写时间。在这种情况下,我们也称为是缓存IO。
但是,在数据库系统数据文件中,我们通常不会使用缓存IO方式,大家可以想象一下,如果你在数据库中,插入一条数据,此时,肯能要写文件,同时,你也写成功了,于是你关闭了文件,写入了成功的日志。但是在系统中,文件是此时就写到磁盘的吗,通常情况是没有这么及时的,又突然,系统断电或者生病,死了,在系统缓存中的文件是否写回去了呢,如果有,那是幸运,如果没有呢,那就是玩完了。
当然在系统的IO中,拥有不同三种机制:同步IO机制、异步IO机制、延时IO机制。这三种中,貌似同步异步IO可以使用在数据库系统中,但是在仔细一想,我想大家就可以发现,同步IO造成的读写磁盘次数过多,异步IO显然是可以进行数据库文件读写,比如Oracle中也有使用异步IO的,但是具体的实现与原理,我还没有接触到,考虑到基于两个e(Embedded,Experiment),我决定采用自缓存策略,一来,可以控制缓存的大小,控制程序所需的内存;二来,在缓存替换算法那块,可以做一点铺垫,以便以后大家用的到的地方进行实验与研究。因此在文件读写上,我是决定使用直接IO的机制。
当然,还有很多中读写方式,但是据我所需,我想这些我也就够用了。下面是一种linux文件标识符:我可能常用到也就O_RDWR、O_
DIRECT、O_LARGEFILE(这个标识目前还不知道最大文件到多大啊,支持可以大于2G)。
首先来看一下,普通的通常情况下的文件IO,此时呢,读写文件会借助于操作系统的文件缓冲区,这样能够减少磁盘的读写次数,一是缩短了时间,二是延长了磁盘的使用寿命,三是增快的文件的读写时间。在这种情况下,我们也称为是缓存IO。
但是,在数据库系统数据文件中,我们通常不会使用缓存IO方式,大家可以想象一下,如果你在数据库中,插入一条数据,此时,肯能要写文件,同时,你也写成功了,于是你关闭了文件,写入了成功的日志。但是在系统中,文件是此时就写到磁盘的吗,通常情况是没有这么及时的,又突然,系统断电或者生病,死了,在系统缓存中的文件是否写回去了呢,如果有,那是幸运,如果没有呢,那就是玩完了。
当然在系统的IO中,拥有不同三种机制:同步IO机制、异步IO机制、延时IO机制。这三种中,貌似同步异步IO可以使用在数据库系统中,但是在仔细一想,我想大家就可以发现,同步IO造成的读写磁盘次数过多,异步IO显然是可以进行数据库文件读写,比如Oracle中也有使用异步IO的,但是具体的实现与原理,我还没有接触到,考虑到基于两个e(Embedded,Experiment),我决定采用自缓存策略,一来,可以控制缓存的大小,控制程序所需的内存;二来,在缓存替换算法那块,可以做一点铺垫,以便以后大家用的到的地方进行实验与研究。因此在文件读写上,我是决定使用直接IO的机制。
当然,还有很多中读写方式,但是据我所需,我想这些我也就够用了。下面是一种linux文件标识符:我可能常用到也就O_RDWR、O_
DIRECT、O_LARGEFILE(这个标识目前还不知道最大文件到多大啊,支持可以大于2G)。
标识符名 | 标识符描述 |
O_RDONLY | 以只读的方式打开文件 |
O_WRONLY | 以只写的方式打开文件 |
O_RDWR | 以读写的方式打开文件 |
O_CREAT | 若文件不存在,则创建该文件 |
O_EXCL | 以独占模式打开文件;若同时设置 O_EXCL 和 O_CREATE, 那么若文件已经存在,则打开操作会失败 |
O_NOCTTY | 若设置该描述符,则该文件不可以被当成终端处理 |
O_TRUNC | 截断文件,若文件存在,则删除该文件 |
O_APPEND | 若设置了该描述符,则在写文件之前,文件指针会被设置到文件的底部 |
O_NONBLOCK | 以非阻塞的方式打开文件 |
O_NELAY | 同 O_NELAY,若同时设置 O_NELAY 和 O_NONBLOCK,O_NONBLOCK 优先起作用 |
O_SYNC | 该描述符会对普通文件的写操作产生影响,若设置了该描述符,则对该文件的写操作会等到数据被写到磁盘上才算结束 |
FASYNC | 若设置该描述符,则 I/O 事件通知是通过信号发出的 |
O_DIRECT | 该描述符提供对直接 I/O 的支持 |
O_LARGEFILE | 该描述符提供对超过 2GB 大文件的支持 |
O_DIRECTORY | 该描述符表明所打开的文件必须是目录,否则打开操作失败 |
O_NOFOLLOW | 若设置该描述符,则不解析路径名尾部的符号链接 |
相关文章推荐
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- 用PS实现纹理浮雕效果代码
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 用vbs实现cmd功能的代码
- 一个简单的asp数据库操作类
- 用双网卡实现三机互联
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 最近比较流行的数据库挂马
- 重装主控服务器后,数据库连接失败的解决办法:请正确还原数据库。
- 九种防MDB数据库被下载的方法小结
- asp向数据库插入数据的方法rs