2011年1月3日 星期一

有效率的文字檔案讀取方式

作者: os653 (allstar) 看板: C_and_CPP
標題: [問題] 有效率的文字檔案讀取方式
時間: Mon May 18 00:27:32 2009

需要處理的資料,單筆固定 100 bytes
資料不會超過 30000 筆
但是不是全部資料都需要用到
請問用什麼方式去讀會比較好?



爬文爬到

 作者  BETNPP (NPP)                                           看板  C_and_CPP
 標題  Re: [問題] 比較有效率的文字檔案寫入方式
 時間  Mon Aug 25 10:13:21 2008
───────────────────────────────────────
一次從硬碟讀多一點資料呢? 應該會比一直去跟硬碟小筆資料快
因為request次數變少了吧
之前處理過4GB的純文字檔就是用這樣處理的



我一開始的想法是,要使用資料的時候再去檔案讀
以每筆資料 70 bytes,30000 筆共 21 MB 的資料下去跑測試
一次讀一筆,讀入 30000 筆
共花 3714 毫秒
平均一筆資料 0.124 毫秒

再來試著一次讀取全部資料,一樣是那 21 MB 的測試資料
共花 108 毫秒
平均一筆資料 0.004 毫秒

問題在於,檔案有大有小,有些資料又不是全部需要
只有 100 筆資料時,一次讀取全部資料花 1 msec,分次讀取花 20 msec
一次讀取全部資料大概跟分次讀 5 筆資料消耗同等時間,一次讀取是比較好的選擇
但檔案大時
有可能共有 30000 筆資料且 30000 筆資料全部都需要,那一次讀取會快 40 倍
也有可能有 30000 筆資料但只需要其中 1 筆資料,那分次讀取會快 1000 倍
這時候一次讀取跟分次讀取各有勝場,無法比較

需要多少資料是看使用情況決定的,事前沒辦法猜測
可以確定的是,只需要一筆資料的機會不會太低
因為資料是照時間排序的,使用者有可能只需要最新的資料

請問有沒有比較好的方法處理這個問題呢?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.3.244
[1;37m推 LiloHuang:用 Memory Mapped File 的方式來讀會好一點              05/18 00:35
→ os653:搞定了,感謝您                                            05/18 01:30
→ os653:以三萬筆資料來說,讀少資料的話,MMF與分次讀取不相上下     05/18 01:33
→ os653:三萬筆全讀入的話,MMF 比一次讀取慢約四倍,可以接受        05/18 01:34
→ os653:平均效能應該能夠提升不少 ψ( ̄︶ ̄ )                      05/18 01:36

沒有留言:

張貼留言

您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.