请高手帮忙分析一下在一个大的文件中插入或者删除一段会对系统有什么影响

sun4216 2011-02-12 05:42:43
我需要在一个大的文件(例如1GB以上)中频繁插入和删除一段,插入和删除位置不确定。请问对系统有什么影响,是不是系统IO会严重变慢。有什么方式可以优化这种操作?
...全文
72 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
schlafenhamster 2011-02-16
文件是随机文件就好办一些。
  • 打赏
  • 举报
回复
jackson35296 2011-02-16
算法的复杂度太高了,不可取的。必须改变数据结构,不能用文件。文件里插入数据只能采用写临时文件的方式。试想1G的数据写入到硬盘要多少时间?频繁插入,删除的话,你的硬盘就要一直写个不停,系统资源占用率超高。假如你要在500MB+1的位置插入10个字节,你只能是把500MB写到一个临时文件,然后写入这10字节,然后写入原文件的后500MB内容,都完成后,删除原文件,把临时文件改名。折腾了1G的数据后才完成了插入这10个字节的操作,效率可想而知。
解决方法是把大文件拆成多个小文件,或者把文件改用数据库代替。
  • 打赏
  • 举报
回复
手机写程序 2011-02-16
[Quote=引用 10 楼 sun4216 的回复:]
TO eyey1:
如果如你所说,那我初始化一个大文件,不做插入和删除操作(想办法用算法避免)。只做更新操作,改变中间某一段文件,但文件大小不变,是不是就不会有产生碎片问题呢?
[/Quote]
初始化一个大文件,我觉得要取决于磁盘是否有足够的连续空间,假如磁盘已经都是碎片了,我想你的大文件也不可能是连续的。
只做更新操作,改变中间某一段文件,我觉得如果大文件是连续的,想法很不错。

[Quote=引用 11 楼 sun4216 的回复:]
TO eyey1:
另外你提到的数据库的做法是什么样的,哪里可以找到相关参考?谢谢
[/Quote]
有一本叫《数据库系统实现》的书讲到了磁盘,你找找看。
但现在又觉得帮助不大,因为你的文件是在文件系统(FAT,NTFS)上的,不能自己管理磁盘。可能能参考是数据预取,命中等等。
  • 打赏
  • 举报
回复
sun4216 2011-02-16
再加60分,寻求解决。高手快来呀
  • 打赏
  • 举报
回复
sun4216 2011-02-16
TO eyey1:
另外你提到的数据库的做法是什么样的,哪里可以找到相关参考?谢谢
  • 打赏
  • 举报
回复
sun4216 2011-02-16
TO eyey1:
如果如你所说,那我初始化一个大文件,不做插入和删除操作(想办法用算法避免)。只做更新操作,改变中间某一段文件,但文件大小不变,是不是就不会有产生碎片问题呢?
  • 打赏
  • 举报
回复
Conry 2011-02-16
[Quote=引用 17 楼 tompaz 的回复:]
换用数据库吧,自己折腾又难又低效
[/Quote]

还是交给数据库吧,你只需要sql就行
  • 打赏
  • 举报
回复
tompaz 2011-02-16
换用数据库吧,自己折腾又难又低效
  • 打赏
  • 举报
回复
手机写程序 2011-02-15
应该会产生磁盘碎片,使文件的物理位置不连续。读取文件时硬盘要频繁切换磁头。
大的数据库相信也有这样的问题,就是数据库的碎片,应该道理一样,要解决的话参考数据库的做法吧。
  • 打赏
  • 举报
回复
sun4216 2011-02-15
怎么没有人,给个意见啦。求高手现身
  • 打赏
  • 举报
回复
sun4216 2011-02-14
我觉得应该从文件系统的角度来分析,最好要知道FAT和NTFS的一些基本原理。比如说,从文件开头处插入一段整个文件的后面是要挪位还是不用挪位,还是只是申请一块新的存储区。如果需要挪位,那可能就要象vann1982说的那样,文件需要拆分才好
  • 打赏
  • 举报
回复
vann1982 2011-02-14
大文件如果操作频繁考虑拆分
  • 打赏
  • 举报
回复
你说的这几种操作 如果排除数据的特殊性 我不认为删除或者更新的差别有多大
  • 打赏
  • 举报
回复
sun4216 2011-02-14
这个文件就是因为内存有时候放不下所以才放在硬盘上的,所以不考虑内存映射等。我想知道这样操作文件有什么样的影响,比如删除、插入和更新哪个影响大?删除文件头部和尾部哪个影响大?插入文件头部和尾部哪个影响大?更新文件头部和尾部哪个影响大?等等问题。这样我就可以有针对性的提高文件IO的性能。上面几个回答都不是我想要的,不过还是谢谢了!
  • 打赏
  • 举报
回复
jwybobo2007 2011-02-12
用内存映射可以提高效率,影响是有的,毕竟会发生频繁IO
  • 打赏
  • 举报
回复
liutengfeigo 2011-02-12
肯定有影响的
  • 打赏
  • 举报
回复
healer_kx 2011-02-12
应该是吧,建议用内存映射文件。

或者根据文件内容,做一些技巧性质的优化。
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.6w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2011-02-12 05:42
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……