首页
社区
课程
招聘
[求助]什么样的文件结构能够支持灵活的写操作呢?
发表于: 2013-5-16 00:55 5250

[求助]什么样的文件结构能够支持灵活的写操作呢?

2013-5-16 00:55
5250
文件这玩艺,是顺序存储的。其读写是线性的,依靠偏移量实现效率。这种文件,对于读是没问题的。很多可执行文件、影音文件,都是一次做好,多次读取。基本没什么改变的需要。这种情况下,传统意义的文件确实很好用。C语言的文件函数或者Windows 的文件API基本都能实现得很好。

但某文件如果在读的同时(先不强调读吧!)也是频繁写的(既有增加、也有修改、删除),那对于文件的固定结构来说,简直是毁灭性的。因为文件的本身其实是数组,但为了适应这种频繁而又无法预知未来的写操作,需要有类似链表一样的支持。但因为磁盘是线性而实在的,并不是虚空和立体的,因此在一个线性的序列中,会随着删除有很多碎片产生,同时因为这些碎片的存在也会最后使顺序读取变为不可能,最后只有依赖链表了。本来顺序读写的性能优势,最后被链表的遍历给弄得荡然无存。虽然理论上可以进行文件内部的数据迁移,摸平碎片,但这对小文件或许没什么,如果一个文件达到几百兆(更不用说G、T级了),这样倒腾的代价太大,基本没可能。

以上说还是在一个文件中只有一个链表存在,即该文件的读写最小单元只有一种。这种文件的结构太简单了,通常的文件都不是只有一个结构的,很多文件都是由若干个结构组成的,这样一来每种结构就对应了一个链表,我的天,这样一来这文件的空间分配太让人头疼了。碎片简直成几何级数增加。不知道我说的你们理解不?或者我的想法哪里不对?我是不是有点把问题看得太严重了!?现实中,面对这种情况是怎么处理的?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
文件迁移又不是真的移动磁盘数据 只是移动文件位置标志而已.你是想表达在读的过程又可以写是吧?
2013-5-16 04:56
0
雪    币: 213
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
确如你所说,不是人工搬运,只是地址变更。但你大规模地变更数据块内每个存储单元的地址,难道不要遍历,这效率何其低,就算加上索引块,但索引块也是要维护的吧!每维护一次,就是对数据块的遍历,这效率,这是纯I/O操作。这程序要慢到什么程度啊!?

我想的可能不对,因为现实中很多软件都要面对这问题。我只是想知道现实中一般是怎么解决的?
2013-5-16 07:34
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
以块为数据读写单位,实际上磁盘物理读写也是数据块形式吧,而不是你所说的好几G的文件都是线性的吧
2013-5-16 07:46
0
雪    币: 962
活跃值: (1681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
可以参考开源数据库的文件结构,和你的需要很类似
2013-5-16 08:56
0
雪    币: 213
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
但是若干个数据块排在一起,难道不是线性的吗?这跟地址空间一样。
2013-5-16 11:08
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
为什么你不翻下ROS的代码......或者LINUX的......

最差最差,谷歌啊..没代码起码原理可以知晓,,.随便一搜一大堆
http://wenku.baidu.com/view/65aa3b85ec3a87c24028c4ad.html
http://wenku.baidu.com/view/2094605e312b3169a451a441.html
2013-5-16 13:46
0
游客
登录 | 注册 方可回帖
返回
//