作者: 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
沒有留言:
張貼留言
您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.