java 板


LINE

現在正在寫一個程式處理一個極大的文章 (256MB) 目前寫的方法是硬把他存到二維陣列之中再去做處理 基本的格式是這樣 id data1 data2 data3 ... 現在困擾的是要去找到對應id的資料去做處理的時候 搜尋整個array需要花費相當多的時間 (也要考慮記憶體的問題) 上網看了幾個方法但是好像不是我要的 1.File Channel 不用讀入整個檔案可以減少記憶體花費 (但是external search不是很花時間嗎?) 2.Map 有嘗試用map的方法去做,但是這樣耗費的記憶體好像會相當龐大 (我初始給到512MB了還是會爆炸) 3. 這個不知道是不是方法, 想把原本的資料按照id排序之後再用binary search 希望可以增加搜尋速度 不知道各位有沒有什麼方法處理這種問題? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.188.43
1F:→ pico2k:改用x64的環境 03/08 21:47
2F:→ Lordaeron:NoSQL 來處理吧, 256GB 都好(我隨便講的) 03/08 21:51
3F:→ james732:丟進sqlite 03/08 22:12
4F:→ Chikei:存Map<Id, FilePos>,找Id之後直接跳到檔案中FilePos存取 03/08 22:17
5F:→ johnhao1206:謝謝!! 我試試看Map(id,FilePos)的方法 03/08 22:21
6F:→ awert:RandomAccessFile ? 不知道適不適合 03/08 22:24
7F:→ qrtt1:重點不是資料量,而是你最後要得到什麼。有這個才能提策略. 03/08 22:46
我要的就很像是做一個查表法,要依照id去取得不同的數值 但是id不是照順序排列, 而且查詢的key分別有(id1)、(id1,id2)、(id1,id2,id3)三種組合 (所以不能用id當作array的index直接去access) array裡面的資料只要取得,不用更動 (增加、刪除等等) ○ 剛剛用存Map<Id, FilePos>測試效率提升很多,謝謝 ○ 我錯了!! 因為我程式寫錯的關係,所以它只存到(id1)的組合 難怪跑這麼順,處理三種組合還是會爆炸 繼續嘗試看看
8F:推 LaPass:id1 id2 id3分別是什麼? 03/09 13:09
9F:→ johnhao1206:都是數字 (0~72646) 但我把它存成String 03/09 13:41
Map1<String,int> Map2<String[],int> Map3<String[],int> 三種組合我分別做三個map處理這樣
10F:→ johnhao1206:照理來說應該分別是會有72646,72646^2,72646^3筆資料 03/09 13:47
11F:推 LaPass:你的文章格是是像這樣嗎? 03/09 15:15
12F:→ LaPass: 2433 5215 6544 5644 03/09 15:16
13F:推 LaPass:後面的部分看不太懂到底想幹什麼..... 03/09 15:19
不好意思 我舉個例子 一整個檔案分為三個區段 id1 data data ------------ 0 0.1 0.2 我現在存的方法是把三個區段分別存在三個Map中 1 0.5 0.2 2 0.1 0.2 String section1 = id 3 0.4 0.2 Map1.put(section1,FilePos) id1 id2 data data --------------- 0 0 0.3 0.2 String[] section2 = {id1,id2} 0 1 0.5 0.2 0 2 0.1 0.4 Map2.put(section2,FilePos) 0 3 0.1 0.2 1 0 0.3 0.6 Map2跟Map3都是存String[]當作key id1 id2 id3 data data ------------------ 0 0 0 0.1 0.1 0 0 1 0.1 0.1 0 0 2 0.1 0.1 0 0 3 0.1 0.1
14F:推 LaPass:用TreeMap<String,Integer>,然後Key為 0 0_0 0_0_0 03/09 16:34
15F:→ LaPass:Integer為行數,或是其他可以找到檔案位置的東西。 03/09 16:36
16F:→ LaPass:FilePos我沒用過,不清楚那個東西的特性,我還要再看。 03/09 16:37
17F:→ LaPass:不行.... 感覺起來還是會有問題.... = = 03/09 16:39
18F:→ LaPass:你還是用資料庫吧 (暈死) 03/09 16:40
19F:→ johnhao1206:後來我把VM的記憶體改更大硬跑可以了 03/09 17:31
20F:→ johnhao1206:但我想還是學學資料庫才是長久之計,謝謝大家 03/09 17:33
21F:→ Lordaeron:就NoSQL 了嘛, 快去學吧, 紅哦 03/09 21:32
22F:推 LaPass:NoSQL也聽一陣子了,那東西到底怎麼用.... = = 03/09 23:54
23F:→ johnhao1206:那個我也不是很清楚,是像hadoop之類的東西嗎? 03/10 08:40
24F:推 SansWord:學資料庫吧。用資料庫輕鬆搞定的問題,不用自己造輪子 03/10 11:51
今天改成資料庫的做法去寫 但是速度實在是太悲劇了... 可能因為太頻繁存取的關係 晚點改成X64的環境好了 ~"~
25F:→ qrtt1:你現在是寫成什麼樣子啊,真好奇QQ 03/11 00:19
我現在要做的舉個簡單的例子就像是食字路口的遊戲,從頭走到尾要花最少的錢 因為考慮的狀況很多而且算錢的時候必須去參考那個大的檔案表 而且價錢會因為上一個食物跟上上個食物而有所不同 所以才會遇到這樣的困難 我現在的作法是先把檔案表讀入二維陣列之中 讀取資料的時候順便把它丟到Map之中建立 Key是食物的名子,Value是存在陣列之中的index 這樣速度有快很多,只是記憶體真的吃很大 ※ 編輯: johnhao1206 來自: 114.44.179.244 (03/11 08:16)
26F:→ qrtt1:你的 key 重複那麼多,可以用同一個物件會再省很多。 03/11 10:10
27F:→ Lordaeron:NoSQL 你要跟hadoop 劃上等號也可以, 反正台式簡化 03/11 21:13
28F:→ qrtt1:hadoop 其實是一大群專案的名稱,用什麼功能要細看xd 03/11 21:57
29F:→ Lordaeron:說來說去hadoop 就是一個人家幫你寫好的DHT. 03/11 22:34
30F:推 Chikei:72646^3筆資料冏,先想想演算法來減少資料量吧 03/12 11:37
31F:→ braveht:如果有72646^3筆資料,檔案大小應該遠遠大於256MB。 03/12 21:55
32F:→ braveht:如果資料量是256MB,又強調速度的話,塞進記憶體是最佳解 03/12 21:58
33F:→ braveht:如要再省空間可參考qrtt1的建議,或用int來取代string 03/12 22:07
34F:→ johnhao1206:謝謝您的建議,現在也朝著這個想法努力中 也謝謝qrtt1 03/13 00:24
35F:推 chen1025:資料庫建索引應該就可以解決了 03/13 23:50
資料庫有測試過,但速度方面不太能夠接受 ※ 編輯: johnhao1206 來自: 114.44.179.244 (03/14 00:54)
36F:→ nick23:用SQLite 把資料放到ram disk 會好一點嗎? 03/18 02:08







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