[討論] 如何讀取資料量龐大的文字檔?

看板C_and_CPP (C/C++)作者 (casper)時間15年前 (2010/10/26 14:08), 編輯推噓1(1013)
留言14則, 5人參與, 最新討論串1/1
感覺這是external search的問題,但是翻了書本,卻沒有說明要如何實作。 現在我有個文字檔,裡面格式是: " 中文字串 (空白) 整數數字 " , 文字檔裡總共有"四億"筆資料。 現在想做的是... 想搜尋這個文字檔裡的某一筆資料。 以前的做法是: 把文字檔裡的資料讀進memory, 然後建成map,再用map search的方式搜尋當中的某筆資料。 但是這個做法的問題是...map建造出來會太大,超過memory的負荷。 但這種做法卻是最快的做法吧。 不知道還有沒有什麼做法有效率、做法速度快。 想請教前輩們還有哪些做法呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc)

10/26 14:12, , 1F
FileMapping?
10/26 14:12, 1F

10/26 14:20, , 3F
file mapping 不行啊,因為它資料可能超過vm space
10/26 14:20, 3F

10/26 14:21, , 4F
這個問題其實就是簡單的資料庫問題
10/26 14:21, 4F

10/26 14:22, , 5F
先把每個字串進行hash,然後依照hash值存放在檔案中的
10/26 14:22, 5F

10/26 14:23, , 6F
不同位置,要搜尋的時候就利用hash+fseek跳到特定位置
10/26 14:23, 6F

10/26 15:45, , 7F
@@
10/26 15:45, 7F

10/26 15:48, , 8F
請問樓上意思是說要先把文字檔建成資料庫嗎?
10/26 15:48, 8F

10/26 15:49, , 9F
XD 不用阿...總之就是把檔案內的資料位置都可以作一個
10/26 15:49, 9F

10/26 15:50, , 10F
分動作, 給你一個 KEY 要有辦法馬上知道他大概在檔案
10/26 15:50, 10F

10/26 15:51, , 11F
的什麼位置, 再 fseek 到那邊讀資料, 一次讀少少筆,
10/26 15:51, 11F

10/26 15:52, , 12F
不過可能需要用二進位的方式來存會比較好算就是( 上面
10/26 15:52, 12F

10/26 15:52, , 13F
修正, 是分群的動作)
10/26 15:52, 13F

10/28 05:48, , 14F
concurrent programming吧!用平行運算來讀會快很多
10/28 05:48, 14F
※ 編輯: casper67831 來自: 125.231.217.180 (09/29 10:45)
文章代碼(AID): #1Cnd1QgN (C_and_CPP)
文章代碼(AID): #1Cnd1QgN (C_and_CPP)