写大文件问题探讨

hmsuccess 2009-03-07 12:10:14
我手里有一个应用---解析大型xml文件(),然后把解析后的数据保存到外存上(由于前面解析得到的信息还要参考后面的信息来更新自己,所以不能边解析边向一个文件直接写入数据)

于是,我想到的第一个方法就是边解析,边将数据保存到B+树上,B+树的data区域存放着一个文件的偏移位置,当然随着解析的进行,
B+树要维持数据的更新,即就是按照一定的顺序存放,这样解析起来就很慢,由于在B+树更新数据时,会出现大量的文件内容挪动问题。

参考文件内存映射的技术,能不能这样,对于写数据的文件建立一个文件内存映射,然后,B+树的data区域存放着这个映射文件的偏移位置,随着数据放入,B+树中,这样就相当于直接在内存中进行排序了,不能这样行得通吗?

或者,大家还有更好的方法,当然除过借用数据库,谢谢大家!!
...全文
138 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmsuccess 2009-03-08
  • 打赏
  • 举报
回复
呼叫高手,谢谢
  • 打赏
  • 举报
回复
过来学习.
疯哥哥 2009-03-07
  • 打赏
  • 举报
回复
"将数据保存到B+树上","由于在B+树更新数据时,会出现大量的文件内容挪动问题"
呵呵,不太明白.
你不是把数据的内容放到树里面吧...
单独分配数据空间,然后用这个空间写数据,把数据指针挂在树上就可以吧..这样更新起来是不是不用挪动数据了...

up,帮你顶一下!
hmsuccess 2009-03-07
  • 打赏
  • 举报
回复
我手里有一个应用---解析大型xml文件(),然后把解析后的数据保存到外存上(由于前面解析得到的信息还要参考后面的信息来更新自己,所以不能边解析边向一个文件直接写入数据)

于是,我想到的第一个方法就是边解析,边将数据保存到B+树上,B+树的data区域存放着一个文件的偏移位置,当然随着解析的进行,
B+树要维持数据的更新,即就是按照一定的顺序存放,这样解析起来就很慢,由于在B+树更新数据时,会出现大量的文件内容挪动问题。

参考文件内存映射的技术,能不能这样,对于写数据的文件建立一个文件内存映射,然后,B+树的data区域存放着这个映射文件的偏移位置,随着数据放入,B+树中,这样就相当于直接在内存中进行排序了,不能这样行得通吗?

或者,大家还有更好的方法,当然除过借用数据库,谢谢大家!!
M_S_D_N 2009-03-07
  • 打赏
  • 举报
回复
海量数据不适合存放成xml文件格式进行查询、删除和修改吧?!
不过现在很多公司都这么做,难道就为了在格式上省时省力?
sagegz 2009-03-07
  • 打赏
  • 举报
回复
友情UP~!
dongpy 2009-03-07
  • 打赏
  • 举报
回复
mark
hmsuccess 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 oyljerry 的回复:]
直接把文件放到内存映射文件中,CreateFileMapping,MappingViewOfFile等,内存映射文件处理大文件效率高。然后你直接在内存中处理等
[/Quote]
我也想到这个方法,但是,我的数据是要实时更新的,
比如所,将xml文件中elements相同的数据放到一起,所以我才借用b+树和映射文件

对了oyljerry,问一个问题,映射文件刚开始是没用内容的,这样在创建内存映射文件时,可以吗,
谢谢,
oyljerry 2009-03-07
  • 打赏
  • 举报
回复
直接把文件放到内存映射文件中,CreateFileMapping,MappingViewOfFile等,内存映射文件处理大文件效率高。然后你直接在内存中处理等
yangch_nhcmo 2009-03-07
  • 打赏
  • 举报
回复
帮顶,期待高手给出方案
lingyin55 2009-03-07
  • 打赏
  • 举报
回复
mark 继续关注
jn989 2009-03-07
  • 打赏
  • 举报
回复
"由于在B+树更新数据时,会出现大量的文件内容挪动问题",这个我也不明白,更新时不是移动指针就可以了吗?怎么会有文件内容移动的问题呢?再说某一块数据更新,只要通过B+树定位到该区域,直接将更新后的数据覆盖即可了啊?怎么会需要移动呢?
采用操作系统中有关文件管理的方法应该可以解决吧?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧