[問題] 動態載入資料

看板C_and_CPP作者 (無言)時間14年前 (2012/02/23 00:09), 編輯推噓1(1020)
留言21則, 5人參與, 最新討論串1/1
最近在實作一個要在移動裝置上使用的程式, 該程式需要載入一個相當大的資料檔案,資料筆數有十五萬。 每筆資料需要 parse 才能存入設計的資料結構 (hash table)中, 全部載入完成後才會關檔,所以在一開始載入的時候會相當的久。 而且程式實際運作時,大概都只需要其中的數筆到數十筆資料的數據而已。 此外,移動裝置可使用的記憶體有限,全部載入會耗費相當多的記憶體空間 因此想採取另一個策略,就是利用動態載入的方式, 需要某筆資料時才去檔案中把該筆資料的相關數據讀取出來。 我要問的是 程式是應該一開始就開檔,到運算完成後不會再使用資料檔案時才關檔 還是應該每讀一筆資料就開檔,讀完之後就馬上關檔 還有這兩種作法有沒有什麼問題或缺點? 或是有更好的做法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.181.53

02/23 00:12, , 1F
讀檔能跳著讀嗎?
02/23 00:12, 1F

02/23 00:14, , 2F
可以,移動檔案指標。hash table有事先存好每筆資料位置
02/23 00:14, 2F

02/23 00:14, , 3F
不知道NoSQL有沒有適合你要的情況
02/23 00:14, 3F

02/23 00:18, , 4F
你要不要直接try看看那種方式比較快?
02/23 00:18, 4F

02/23 00:22, , 5F
1快一點點,但我是想知道檔案指標一直開著不關會怎樣嗎?
02/23 00:22, 5F

02/23 00:24, , 6F
基本上動態載入已經快相當的多了,只是我怕有隱藏風險。
02/23 00:24, 6F

02/23 00:31, , 7F
先把資料弄進去sqlite之類的東西不知道有沒有搞頭
02/23 00:31, 7F

02/23 00:35, , 8F
sqlite就是nosql嗎?
02/23 00:35, 8F

02/23 00:46, , 9F
sqlite好像是個不錯的選擇
02/23 00:46, 9F

02/23 00:46, , 10F
把 Hashtable 想辦法存檔也是一個方法
02/23 00:46, 10F

02/23 00:47, , 11F
這樣到時候只要去讀這個 hash table 即可快速定位
02/23 00:47, 11F

02/23 00:47, , 12F
基本上這就是「資料庫」的精神所在了 XD
02/23 00:47, 12F

02/23 00:51, , 13F
事實上我就是這麼做的。hashtable已經事先存好,要找資料
02/23 00:51, 13F

02/23 00:53, , 14F
就根據key去找出entry實際在資料中的位置。
02/23 00:53, 14F

02/23 01:58, , 15F
你說的大檔就是 hashtable 的存檔嗎?
02/23 01:58, 15F

02/23 01:59, , 16F
不是,hashtable只存key跟對應到大檔的位置
02/23 01:59, 16F

02/23 02:00, , 17F
檔案一直開著沒問題,就是佔用一個 file descriptor 而已
02/23 02:00, 17F

02/23 02:02, , 18F
另外推薦一個嵌入式DB給你,LevelDB,速度很快
02/23 02:02, 18F

02/23 02:03, , 19F
google的大師設計的,搜尋一下就知道了
02/23 02:03, 19F

02/23 02:06, , 20F
多謝各位提供的意見,受用無窮!
02/23 02:06, 20F

02/23 02:06, , 21F
不過你的移動裝置,得自己 build 看看了
02/23 02:06, 21F
文章代碼(AID): #1FHHCdA- (C_and_CPP)