BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 



[算法] 技术难题:向高手们求解大文件记录更新问题
首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
Aquester
光明使者




CU编号: 682147
注册:2008-3-26
最后登录: 2009-07-01
帖子:736
精华:0

可用积分:605 (丰衣足食)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2009-1-7 09:20 

有若干个数据文件,文件由一条条记录组成,每条记录长度相等,均为二进制:
KEY|VALUE
其中KEY长度固定为40字节,VALUE长度固定为32字节,每条记录合计共72字节。
不同的KEY个数1000~5000万,这样数据净大小为720M~3.6G,有10~100这大小的文件。
对上述数据只有增加和修改操作,即增加一条记录(包括KEY和VALUE),和修改一条记录(仅修改VALUE值)。
KEY由5个8字节整数组成,而VALUE则由8个4字节整数组成。

初始时,文件为空,但后续不断有KEY-VALUE加进来,对于文件中不存在的KEY,则需要加进来;
对已经存在的,则需要将两个VALUE相加,然后再写回到文件中。

每10分钟更新一次,也就是将10分钟内收到的数据更新到数据文件中,大概有10万~100万条记录,包括新增的和需要修改的。

由于数据量已经超出内存,所以需要借助磁盘,不知道对这样的情况,采用什么样的方案性能上为佳,
请各位高手指点。



您对本贴的看法:鲜花[0] 臭蛋[0]
5毛党党员
法王
只送鱼,不教打渔



CU编号: 677490
注册:2008-3-17
最后登录: 2009-07-03
帖子:12959
精华:0

可用积分:11939 (大富大贵)
信誉积分:27
专家积分:222 (本版:62)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2009-1-7 09:22 

这时候为什么不尝试用数据库呢?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

我听饼干mm说的:一个人越在意的地方,就是最令他自卑的地方
hellioncu (特别坏)
精灵使



CU编号: 379236
注册:2006-3-1
最后登录: 2009-07-04
帖子:3740
精华:0

可用积分:2158 (小富即安)
信誉积分:100
专家积分:187 (本版:50)
空间积分:0
推广积分:23

来自:地狱
状态:...离线...

[个人空间] [短信] [博客]


3楼 发表于 2009-1-7 09:39 

内存中维护KEY和该KEY在文件中的偏移量(或者记录号)作为索引



您对本贴的看法:鲜花[0] 臭蛋[0]
emacsnw   帅哥 (Santa Monica)
大天使
Santa Monica


CU奥运火炬传递手2008
CU编号: 283212
注册:2005-6-21
最后登录: 2009-07-04
帖子:1695
精华:2

可用积分:3383 (小富即安)
信誉积分:100
专家积分:65 (本版:55)
空间积分:802
推广积分:0

来自:Santa Monica
状态:...保密...

[个人空间] [短信] [博客]


4楼 发表于 2009-1-7 09:41 

man 3 db



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Santa Monica
版主 cugb_cat   帅哥
广告杀手-大法师


CU奥运火炬传递手2008
CU编号: 342049
注册:2005-11-27
最后登录: 2009-07-04
帖子:10938
精华:6

可用积分:17441 (大富大贵)
信誉积分:110
专家积分:439 (本版:120)
空间积分:0
推广积分:10

来自:北京海淀中关村
状态:...保密...

[个人空间] [短信] [博客]


5楼 发表于 2009-1-7 09:44 

最简单方便的方法就是如2楼所说,用数据库。
如果不想用数据库,那就自己实现B+树,用B+树组织文件。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

欢迎访问ToFree社区
www.tofree.org

eveson
大天使




CU编号: 753873
注册:2008-8-29
最后登录: 2009-07-03
帖子:1816
精华:4

可用积分:9390 (腰缠万贯)
信誉积分:5
专家积分:145 (本版:5)
空间积分:0
推广积分:98

状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2009-1-7 09:51 

有个类似的问题,是不是你提的,还是推荐数据库



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

想:一群人做同一行业,上班的时间可以一边工作一边在线交流,可能离的很远,也可能近在咫尺。
北京、嵌入式开发、linux,有一定开发经验,符合这三条就可以加进来我的qq群:40298332
版主 converse   帅哥
广告杀手-法王
Stupid is as stupid does.



CU编号: 117516
注册:2003-12-7
最后登录: 2009-07-04
帖子:13180
精华:14

可用积分:10013 (大富大贵)
信誉积分:145
专家积分:160 (本版:40)
空间积分:0
推广积分:0

来自:芒果花开的地方
状态:...离线...

[个人空间] [短信] [博客]


7楼 发表于 2009-1-7 09:53 

是啊,为什么不用数据库呢...



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Life is always so hard.

God grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.

卖书: http://bbs.chinaunix.net/thread-1053812-1-1.html
zhoubug
精灵



CU编号: 701329
注册:2008-5-6
最后登录: 2009-06-29
帖子:245
精华:0

可用积分:646 (丰衣足食)
信誉积分:0
专家积分:30 (本版:30)
空间积分:802
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


8楼 发表于 2009-1-7 09:56 

lz如果顾忌性能,用BerkeleyDB吧,实时更新你的记录都没问题 操作思路和你现在也很相似



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Based on apache 精简的通用服务器端开发框架:
http://code.google.com/p/zevent/
hellioncu (特别坏)
精灵使



CU编号: 379236
注册:2006-3-1
最后登录: 2009-07-04
帖子:3740
精华:0

可用积分:2158 (小富即安)
信誉积分:100
专家积分:187 (本版:50)
空间积分:0
推广积分:23

来自:地狱
状态:...离线...

[个人空间] [短信] [博客]


9楼 发表于 2009-1-7 09:57 

为啥那么多人推荐用数据库的。LZ要求性能好,当然是自己写文件快多了



您对本贴的看法:鲜花[0] 臭蛋[0]
版主 converse   帅哥
广告杀手-法王
Stupid is as stupid does.



CU编号: 117516
注册:2003-12-7
最后登录: 2009-07-04
帖子:13180
精华:14

可用积分:10013 (大富大贵)
信誉积分:145
专家积分:160 (本版:40)
空间积分:0
推广积分:0

来自:芒果花开的地方
状态:...离线...

[个人空间] [短信] [博客]


10楼 发表于 2009-1-7 10:02 

回复 #9 hellioncu 的帖子

小型的嵌入式数据库,BDB,sqlite之类的,不见得比文件慢多少,你自己做索引那些如果做的不好不见得比它们快....



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Life is always so hard.

God grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.

卖书: http://bbs.chinaunix.net/thread-1053812-1-1.html

首页 » 论坛 » C/C++ »


 


Copyright © 2001-2009 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.061522 second(s), 4 queries , Gzip enabled