У меня есть программа анализа биоинформатики, которая состоит из 5 различных этапов. Каждый шаг по сути представляет собой Perl-скрипт, который принимает входные данные, выполняет магию и выводит несколько текстовых файлов. Каждый шаг должен быть полностью завершен до следующего запуска. Весь процесс занимает около 24 часов на компьютерах с ядром i7.
Одной из основных проблем является то, что на каждом шаге создается около 5-10 гигабайт промежуточных выходных текстовых файлов, необходимых для последующих шагов, и существует множество избыточностей. Например, выходные данные шага 1 используются шагами 2 и 3 и 4, и каждый из них выполняет одинаковую предварительную обработку. Эта структура росла «органически», поскольку каждый шаг развивался независимо. К сожалению, делать все в памяти нам не удастся, поскольку данные объемом 10 гигабайт на диске, загруженные в хеш-массив perl, слишком велики для размещения в памяти.
Было бы хорошо, если бы данные могли быть загружены в промежуточную базу данных, обработаны один раз за шаг и доступны на всех последующих шагах. Данные по существу реляционные / табличные. Некоторым из шагов требуется только последовательный доступ к данным, в то время как другим нужен произвольный доступ к файлам.
Кто-нибудь имеет опыт в подобных вещах?
Какая база данных подойдет для такой задачи? Я использовал и любил SQLite, но масштабируется ли он до размеров 20GB +? Можете ли вы указать postgresql или mysql на интенсивное кэширование данных в памяти? (Я полагаю, что базы данных, написанные на C / C ++, будут гораздо более эффективными с точки зрения памяти, чем perl-хэши / массивы, поэтому большая их часть может кэшироваться в памяти на машине с 24 ГБ). Или есть лучшее решение, не относящееся к rdbms, с учетом накладных расходов на создание, индексацию и последующее уничтожение 20 ГБ + в СУБД для однократного анализа?