我需要在一个大的文件(例如1GB以上)中频繁插入和删除一段,插入和删除位置不确定。请问对系统有什么影响,是不是系统IO会严重变慢。有什么方式可以优化这种操作?

解决方案 »

  1.   

    我觉得应该从文件系统的角度来分析,最好要知道FAT和NTFS的一些基本原理。比如说,从文件开头处插入一段整个文件的后面是要挪位还是不用挪位,还是只是申请一块新的存储区。如果需要挪位,那可能就要象vann1982说的那样,文件需要拆分才好
      

  2.   

    TO eyey1:
    如果如你所说,那我初始化一个大文件,不做插入和删除操作(想办法用算法避免)。只做更新操作,改变中间某一段文件,但文件大小不变,是不是就不会有产生碎片问题呢?
      

  3.   

    TO eyey1:
    另外你提到的数据库的做法是什么样的,哪里可以找到相关参考?谢谢
      

  4.   

    初始化一个大文件,我觉得要取决于磁盘是否有足够的连续空间,假如磁盘已经都是碎片了,我想你的大文件也不可能是连续的。
    只做更新操作,改变中间某一段文件,我觉得如果大文件是连续的,想法很不错。有一本叫《数据库系统实现》的书讲到了磁盘,你找找看。
    但现在又觉得帮助不大,因为你的文件是在文件系统(FAT,NTFS)上的,不能自己管理磁盘。可能能参考是数据预取,命中等等。
      

  5.   

    算法的复杂度太高了,不可取的。必须改变数据结构,不能用文件。文件里插入数据只能采用写临时文件的方式。试想1G的数据写入到硬盘要多少时间?频繁插入,删除的话,你的硬盘就要一直写个不停,系统资源占用率超高。假如你要在500MB+1的位置插入10个字节,你只能是把500MB写到一个临时文件,然后写入这10字节,然后写入原文件的后500MB内容,都完成后,删除原文件,把临时文件改名。折腾了1G的数据后才完成了插入这10个字节的操作,效率可想而知。
    解决方法是把大文件拆成多个小文件,或者把文件改用数据库代替。
      

  6.   


    还是交给数据库吧,你只需要sql就行