Моя программа использует два больших текстовых файла (миллионы строк).Эти файлы анализируются и загружаются в хэши, чтобы к данным можно было быстро получить доступ.Проблема, с которой я сталкиваюсь, заключается в том, что в настоящее время анализ и загрузка являются самой медленной частью программы.Ниже приведен код, где это делается.
database = extractDatabase(@type).chomp("fasta") + "yml"
revDatabase = extractDatabase(@type + "-r").chomp("fasta.reverse") + "yml"
@proteins = Hash.new
@decoyProteins = Hash.new
File.open(database, "r").each_line do |line|
parts = line.split(": ")
@proteins[parts[0]] = parts[1]
end
File.open(revDatabase, "r").each_line do |line|
parts = line.split(": ")
@decoyProteins[parts[0]] = parts[1]
end
И файлы выглядят как пример ниже.Он начинался как файл YAML, но формат был изменен для увеличения скорости синтаксического анализа.
MTMDK: P31946 Q14624 Q14624-2 B5BU24 B7ZKJ8 B7Z545 Q4VY19 B2RMS9 B7Z544 Q4VY20
MTMDKSELVQK: P31946 B5BU24 Q4VY19 Q4VY20
....
Я сталкивался с различными способами настройки файла и их синтаксического анализа, и до сих пор этосамый быстрый способ, но он все еще ужасно медленный.
Есть ли способ улучшить скорость этого или есть другой подход, который я могу использовать?
Список вещей, которыене работают :
- YAML.
- Стандартные потоки Ruby.
- Отключение процессов с последующим извлечением хеша через канал.