我正在尝试使用Sphinx Search Server索引一个非常大的文件(大约14gb)。 该文件是以空格分隔的,每行一个条目。
为了能够与Sphinx一起使用,我需要向Sphinx服务器提供一个xml文件。 如何在不杀死计算机的情况下完成这项工作?
最佳策略是什么?我应该尝试将主文件拆分成几个小文件吗?最好的方法是什么?
注意:我在Ruby中这样做,但我完全接受其他提示。
感谢您的时间。
答案 0 :(得分:0)
我认为主要思想是逐行解析主文件,同时生成结果XML。每当它变得足够大,就把它喂给狮身人面像。冲洗并重复。
答案 1 :(得分:0)
您需要做什么解析?如果转换一次只限于输入中的一行并且不太复杂,我会使用awk而不是Ruby ...
答案 2 :(得分:0)
我讨厌在问题之后不写解决方案的人。所以我会试着不要成为其中之一,希望它会对某人有所帮助。
我在File类中添加了一个简单的reader方法,然后根据我选择的块大小使用它来循环文件。实际上非常简单,就像狮身人面像的魅力一样。
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