免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lifeistrue
打印 上一主题 下一主题

特殊格式的大文本文件处理 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-02-05 10:13 |只看该作者
原帖由 lifeistrue 于 2009-2-5 00:09 发表
琢磨了一天也没有得到结果,将自己的做的描述一下,当作抛砖。
grep 'PAGE:http://a.com/q?pl=' log>tmp#此步得到所有形如PAGE:http://a.com/q?pl=xxx的url
uniq -D tmp>tmp2#此步得到所有xxx出现重复的url(大概有2K个左右)
设置$/="}",

然后一个记录一个记录的去匹配出现重复的url。但是这样实在是太慢了,每个url要扫描整个文件,2K个就要扫描2K次。。。。


你把得到的 url 放到 hash 里,就不用扫描整个文件了,简单判断一下就行了 if exists ...

论坛徽章:
0
12 [报告]
发表于 2009-02-05 10:19 |只看该作者
原帖由 Lonki 于 2009-2-5 00:32 发表
估算了下, 一条记录50字节, 百万级别的记录, 此文件可能高达50G?

你都得到了重复的url的话, 就算一个一个匹配用琢磨一天的时间应该运行完了吧(一条估个很坏情况10秒不得了了, 2K也就5个小时), 脚本就是这样用 ...


看到问题后 先分析问题规模。 赞一个。
很好的习惯 但大多数人都没有。

这么大的文件 用grep是很慢的。  但如果这样的事一年只做一次, 那grep 就grep 吧。。。

几十G的文件处理 要么用数据库
要不多通道处理
(感觉上控制在每次处理的数据量在2, 3百兆之内比较合适. 2, 3百兆 这个数据量怎么折腾都行, 喜欢hash用hash, 喜欢排序用排序)
到底多大比较好和你的环境有关)
比如第一次处理http://www.a开头的 第二次处理 http://www.b开头的
这只是举例 具体怎么分和你的数据有关.  可以拿出几百兆当作抽样分析一下.

大家牛年吉祥
DQP 给大家拜个晚年

论坛徽章:
0
13 [报告]
发表于 2009-02-05 10:25 |只看该作者
原帖由 wxlfh 于 2009-2-5 10:02 发表

是啊,不知道计算机的虚拟内存吃不吃得消?


估计是吃不消了
原先在500M内存的Sparc上 处理一个几百兆的文件
当单个hash超过480多兆时 那个进程就永远的sleep下去了。。。。。。。。

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
14 [报告]
发表于 2009-02-05 10:30 |只看该作者
那我的方法不可行了

论坛徽章:
0
15 [报告]
发表于 2009-02-05 10:44 |只看该作者

回复 #2 Lonki 的帖子

呃,这个对速度要求比较高。。。
用c写?麻烦给个思路
谢谢啦

论坛徽章:
0
16 [报告]
发表于 2009-02-05 10:45 |只看该作者

回复 #11 cobrawgl 的帖子

不错,我想想
谢谢:)

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
17 [报告]
发表于 2009-02-05 10:46 |只看该作者
原帖由 lifeistrue 于 2009-2-5 10:44 发表
呃,这个对速度要求比较高。。。
用c写?麻烦给个思路
谢谢啦

用c跟用perl的思路差不多

论坛徽章:
0
18 [报告]
发表于 2009-02-05 11:06 |只看该作者
原帖由 lifeistrue 于 2009-2-5 10:44 发表
呃,这个对速度要求比较高。。。
用c写?麻烦给个思路
谢谢啦


要真是几十G的话
那么问题肯定出在内存消耗 (对用c会比用perl省些, 但相对于这么大的内存消耗, 省那些内存也不解决问题)
其次是磁盘IO (perl的文件读写效率是相当不错的)
语言的计算速度不知道排到那去了
估计用C也解决不了啥问题 (当然用C的话可以更好的对这个问题进行充分的优化, 那需要的工作量就不是一个级别了)

除非这个东西对速度的要去真的是很严格, 否则就不要用C了, 相信perl吧。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
19 [报告]
发表于 2009-02-05 11:07 |只看该作者
越来越觉得
如果记录很多的话,数据库是比较好的选择。

论坛徽章:
0
20 [报告]
发表于 2009-02-05 11:23 |只看该作者

回复 #19 ynchnluiti 的帖子

同意 同意
不管是从效率还是从灵活性上考虑 用数据库都是不错的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP