我試圖使用Sphinx Search Server來索引一個非常大的文件(大約14GB)。 該文件是空白分隔的,每行一個條目。解析大文件(10 + gb)並在另一個文件中寫入內容
爲了能夠在Sphinx中使用它,我需要爲Sphinx服務器提供一個xml文件。 我怎樣才能不殺我的電腦?
什麼是最佳策略?我應該嘗試在幾個小文件中拆分主文件嗎?什麼是最好的方式來做到這一點?
注:我在Ruby中這樣做,但我完全開放給其他提示。
謝謝你的時間。
我試圖使用Sphinx Search Server來索引一個非常大的文件(大約14GB)。 該文件是空白分隔的,每行一個條目。解析大文件(10 + gb)並在另一個文件中寫入內容
爲了能夠在Sphinx中使用它,我需要爲Sphinx服務器提供一個xml文件。 我怎樣才能不殺我的電腦?
什麼是最佳策略?我應該嘗試在幾個小文件中拆分主文件嗎?什麼是最好的方式來做到這一點?
注:我在Ruby中這樣做,但我完全開放給其他提示。
謝謝你的時間。
我討厭在問題後不寫解決方案的人。所以我會盡力不要成爲他們中的一員,希望它能幫助別人。
我在File類中添加了一個簡單的閱讀器方法,然後根據我選擇的塊大小使用它來循環文件。實際上很簡單,像獅身人面像魅力一樣工作。
class File
# New static method
def self.seq_read(file_path,chunk_size=nil)
open(file_path,"rb") do |f|
f.each_chunk(chunk_size) do |chunk|
yield chunk
end
end
end
# New instance method
def each_chunk(chunk_size=1.kilobyte)
yield read(chunk_size) until eof?
end
end
就用這樣的:
source_path = "./my_very_big_file.txt"
CHUNK_SIZE = 10.megabytes
File.seq_read(source_path, CHUNK_SIZE) do |chunk|
chunk.each_line do |line|
...
end
end
我認爲主要想法是逐行解析主文件,同時生成結果XML。每當它變得足夠大時,將它送到獅身人面像。沖洗並重復。
因此,這解決了您的原始問題? – 2012-09-28 23:51:57