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/m.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燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP