C_and_CPP 板


LINE

饿死抬头 我大学原本写C,但进公司後,经由前辈建议,学用Perl 同时也用Perl的强项,Regular expression(正规表示式)来改善工作效能 不过最近碰到一个问题,让我考虑是不是要回归C的怀抱 就是我工作上需要对於大型文字档做读写,从3G~10G不等 大致是这样,从文字档读进来,对特定字串做搜寻或修改,然後再写入 目前以一个字串与3G大小的档案内容做比较并读写约需38s 以两个字串比较就得花上2分钟,这效能我不太能接受,同仁也希望能改善 因此想上来问,对於大档案读写有何方法改善效能,是不是真的该回归C? 目前我查过一些资料,可以使用随机档或是binary档的方法 不过小弟我非这方面强项,所以这方法暂时先没考虑 或是我可以搜寻什麽关键字,找资料我可以自己来 我们公司是使用CentOS 7,记忆体约有1.5T 再麻烦各位了,谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 150.116.208.71 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1720849203.A.211.html
1F:推 Dracarys: 搜寻The One Billion Row Challenge 07/13 14:03
OK,感谢
2F:推 wulouise: 我觉得先改格式吧,如果多次对同一个档案seek,不如拆开 07/13 17:06
3F:→ wulouise: 你可以用C写但是瓶颈可能是io bound 07/13 17:07
4F:→ wulouise: 比方先对大档案做index或分拆,下次少搜少写赶快 07/13 17:08
5F:推 wulouise: 你可以试试看光cp要多久 07/13 17:10
大概3G大小就要花上约1-2分钟,用rsync更久.......
6F:推 kdjf: 你match的regex先给出来看看,是不是卡在regex效能 07/13 20:35
7F:→ kdjf: 除非你的程式是逻辑为主,不然你自己写的regex实作不一定能 07/13 20:36
8F:→ kdjf: 赢perl 07/13 20:37
这我清楚,不过现阶段就是要等蛮久的,所以想说挤牙膏看看有没有办法挤出更多效能 我的写法是这样 $input = "X123.X\\d+.X456.XX.RR\\d+"; $_ = "X123.X11.X456.XX.RR0 = 0.01"; while(<fid_rd>){ $tmp = $_; if($tmp =~ /$input/i){ $tmp =~ s/0\.01/1e15/; } } 由於0.01与1e15都是唯一的,所以我直接写死在程式内
9F:推 LPH66: 或者换个说法:「对特定字串做搜寻或修改」是什麽样的改动? 07/13 22:59
10F:→ LPH66: 会想用 regexp 应该是「特定字串」不仅仅是固定文字 07/13 23:00
11F:→ LPH66: 那究竟是个什麽样条件的字串要改成什麽样子? 07/13 23:00
12F:→ LPH66: 然後这个「特定字串」会不会根据需求有变动可能? 怎麽变动? 07/13 23:01
13F:→ LPH66: 会说「两个字串」应该是这样的修改有两条或以上的改动规则 07/13 23:03
14F:→ LPH66: 这些规则的数量有多少? 规则型态有哪些? 07/13 23:03
15F:→ LPH66: 这些都是在考虑要不要换做法时可能会需要评估的问题 07/13 23:04
16F:推 gusion: 原字串和新字串长度一样吗?如果长度不一样,那每次写入就 07/14 00:08
17F:→ gusion: 势必要整个档案重新写入,写入的资料量就不是单纯修改後的 07/14 00:08
18F:→ gusion: 字串大小而已 07/14 00:08
只更换其中一个特定关键字,上面有
19F:推 lc85301: 这个高机率是 IO bound,不是 language 的问题 07/14 12:48
20F:推 lc85301: 如果有需要更详尽的解法,建议给一点范例测资 07/14 12:48
交叉测试过,确定是IO问题没错,不过公司硬体设备就是这样,没办法变 所以我只能研究看看是不是能靠coding来补强
21F:推 b0920075: 先用 profile tool 找热点吧 07/14 16:48
22F:推 steak5566: 前辈好坏 建议学perl 07/15 11:15
对啊!推坑完就跳槽去更好的公司了XD
23F:推 johnjohnlin: 两个字串翻倍代表你档案读两次 07/15 11:35
对的喔!
24F:推 easyman: 关键字 mmap , SIMD string lib ? 07/15 12:57
我来试试,谢谢 ※ 编辑: jacky1989 (150.116.208.71 台湾), 07/15/2024 23:56:46
25F:推 alex70266: mmap或许可以,但要改内容的话可能就..嗯 07/16 12:34
26F:→ james732: 记忆体够大,不能把整个档案塞到RAM处理吗 07/16 14:10
27F:推 kdjf: 你先用dd测一下序列存取同大小的档案花多久吧?目前的写法每 07/16 20:26
28F:→ kdjf: 行会重新seek,可以看一下档案系统快取设定有没有快取到你的 07/16 20:26
29F:→ kdjf: 写入 07/16 20:26
30F:→ kdjf: 也能试看看整个档案丢到ramdisk / fs里再改的话要多久 07/16 20:29
31F:推 Killercat: 你可以先试试看简单的用mmap取代试试看 看瓶颈在哪 08/08 17:03
32F:→ Killercat: https://nieyong.github.io/wiki_cpu/mmap详解.html 08/08 17:03
33F:→ Killercat: 你可以参考一下为何他可能会快一点,以及他如何profile 08/08 17:04
34F:→ Killercat: 自己土炮IO效能是一定烂的 让历史悠久的工具帮忙吧 08/08 17:04
35F:→ Killercat: Read only的use case应该可以直接套mmap不会有问题 08/08 17:05
36F:→ Killercat: 不过1.5T记忆体喔 那直接开个tmpfs在mmap吧XD 08/08 17:07
37F:推 kingofsdtw: 开档分析资料结构? 10/31 20:11
38F:→ kingofsdtw: 那就是看你定位是读到记忆体分享 10/31 20:12
39F:→ kingofsdtw: 还是ramless定位 10/31 20:12







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP