我试图使用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