文本資料格式如下,特征值“name:”后面的資料不一樣,ILINE到END中只需要決議VRTX行的資料。資料量不大時用普通方式(每行讀)可以,但資料量特別大(相同格式)時效率就很低,通常一個檔案有20M到100M左右。求高手賜教。
GOCAD PLine 1
HEADER {
name:bounding_pline_pm-0920
color:0.8 0.8 0.1 1.0
atoms:off
cn:off
line_visible:on
name_in_model_list:bounding_pline_pm-0920
}
GEOLOGICAL_TYPE boundary
ILINE
VRTX 1 3274.65185547 3388.31103516 600
VRTX 2 2780.47558594 2596.45825195 600
VRTX 3 2367.03491211 2222.10327148 600
VRTX 4 2253.71923828 2140.22363281 600
VRTX 5 2106.87524414 1845.48815918 600
VRTX 6 2309.38818359 1265.0916748 600
VRTX 7 2309.38818359 1265.0916748 0
VRTX 8 2106.87524414 1845.48815918 0
VRTX 9 2253.71923828 2140.22363281 0
VRTX 10 2367.03491211 2222.10327148 0
VRTX 11 2780.47558594 2596.45825195 0
VRTX 12 3274.65185547 3388.31103516 0
SEG 1 2
SEG 2 3
SEG 3 4
SEG 4 5
SEG 5 6
SEG 6 7
SEG 7 8
SEG 8 9
SEG 9 10
SEG 10 11
SEG 11 12
SEG 12 1
END
uj5u.com熱心網友回復:
我覺得效率的瓶頸并不在決議文本檔案,因為對于文本檔案的I/O是很快的,如果整個程式執行慢是不是考慮入庫的時候慢?比如設定每1000條提交一次,而不是一條一提交uj5u.com熱心網友回復:
測驗過不入庫也比較慢,資料決議太花時間uj5u.com熱心網友回復:
文本檔案的話 自前向后順序讀,邊讀邊判斷,這樣好些。采用每行讀,實際上至少要讀兩遍資料uj5u.com熱心網友回復:
能否用多執行緒處理文本資料?我試了一下沒搞定uj5u.com熱心網友回復:
當然可以了,多執行緒又不是多復雜的東西
另外 處理100M的資料,你的理想效率是多少?底限又是多少?
uj5u.com熱心網友回復:
如你分析的結果快慢主要是因為決議方法是否合理,重復計算和不必要的判斷會增加計算作業量。
uj5u.com熱心網友回復:
自定義一個 格式 再處理到MDB資料庫中即可uj5u.com熱心網友回復:
當然可以了,多執行緒又不是多復雜的東西另外 處理100M的資料,你的理想效率是多少?底限又是多少?
我也覺得多執行緒應該可以解決這個問題,只是對多執行緒了解太少,沒有多少經驗,不知能否提供思路?
100M的資料我希望能在三分鐘左右處理完,現在的演算法高達五分鐘以上
uj5u.com熱心網友回復:
我的思路是按特征值搜索到資料位置,再一行行讀取讀判斷決議,只到出現END結束標記,再搜索另一個特征值重復決議。自認為沒有重復計算,但在文本檔案中搜索特征值是按順序搜索的,不知有沒有較好的方法,
uj5u.com熱心網友回復:
你說的這個自定義一個格式是指什么?
uj5u.com熱心網友回復:
亂說兩句:100M的TXT,MDB格式?如果經常這么干估計系統受不了吧?如果只有一兩次,慢點有什么關系呢?另外,感覺可以生成一個標準格式的Txt,用一條命令就匯入了(txt相當一個資料庫表)。
最后,一次性大量資料的插入,從來就不是資料庫的設計目標!
uj5u.com熱心網友回復:
TXT格式的資料是GOCAD匯出的交換格式檔案,其它程式要用的話就讀這個檔案,生成MDB是因為自已寫的程式用的是這個資料庫,入庫后還要涉及到大量的其它計算
uj5u.com熱心網友回復:
樓主太頑固了。以前做過一個事:oracle資料匯出,直接導因為原來資料有問題,結果采用了查詢到工具界面中再另存為txt的方法,得到的txt檔案有幾百M。然后用一個VFP(這個的速度肯定不是很快的,而且當年的機器肯定沒有現在快!)的小程式規整txt,以便于匯入,就是讀入源txt,同時輸出標準格式txt,然后匯入資料庫。結果非常快!
uj5u.com熱心網友回復:
呵呵,不是我頑固,可能是我沒說清楚,原資料格式就是如下的結構段,GOCAD PLINE1起頭,END結尾,name:值不一樣,象這樣的結構在一個TXT中有幾十甚至上百個,而我需要的就是檢索不同的name:值,再決議該資料段下VRTX后面的資料到資料庫中,VRTX后面的資料格式是固定的好解譯,但有幾十上百行該資料
GOCAD PLine 1
HEADER {
name:bounding_pline_pm-0920
color:0.8 0.8 0.1 1.0
atoms:off
cn:off
line_visible:on
name_in_model_list:bounding_pline_pm-0920
}
GEOLOGICAL_TYPE boundary
ILINE
VRTX 1 3274.65185547 3388.31103516 600
.....
VRTX 12 3274.65185547 3388.31103516 0
SEG 1 2
.....
SEG 12 1
END
uj5u.com熱心網友回復:
不知道用正則決議快不快uj5u.com熱心網友回復:
我覺得你的方法是不錯的。
按特征值搜索到資料位置,再一個詞一個詞地讀取讀判斷決議...[就像詞法分析器一樣作業]
沒有其它更好的方法了 除非你知道在END之后有多少位元組肯定不會出現特征值
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/111607.html
標籤:數據庫相關
上一篇:FastReport問題
