Работа с файлами, слишком большими для хранения в памяти?
У меня есть файл 20 ГБ, который выглядит следующим образом:
Read name, Start position, Direction, Sequence
Обратите внимание, что прочитанные имена не обязательно являются уникальными.
Например, фрагмент моего файла будет выглядеть
Read1, 40009348, +, AGTTTTCGTA
Read2, 40009349, -, AGCCCTTCGG
Read1, 50994530, -, AGTTTTCGTA
Я хочу иметь возможность хранить эти строки таким образом, чтобы я мог
- сохранить файл отсортированным по второму значению
- перебрать отсортированный файл
Кажется, что базы данных могут быть использованы для этого.
Документация, кажется, подразумевает, что dbm нельзя использовать для сортировки файла и его перебора.
Поэтому мне интересно, сможет ли SQLite3 сделать 1) и 2). Я знаю, что смогу отсортировать свой файл с помощью SQL-запроса и перебрать набор результатов с помощью sqlite3. Однако смогу ли я сделать это без нехватки памяти на компьютере с 4 ГБ ОЗУ?
2 ответа
SQLite может делать как 1), так и 2).
Я рекомендую вам попробовать и сообщить о любых проблемах, с которыми вы столкнулись.
При размере страницы по умолчанию 1024 байта размер базы данных SQLite ограничен 2 терабайтами (241 байт). И даже если он может обрабатывать большие базы данных, SQLite хранит всю базу данных в одном файле на диске, и многие файловые системы ограничивают максимальный размер файлов чем-то меньшим, чем это. Поэтому, если вы рассматриваете базы данных такого масштаба, вам было бы неплохо рассмотреть возможность использования механизма базы данных клиент / сервер, который распределяет свое содержимое по нескольким дисковым файлам и, возможно, по нескольким томам.
Посмотрите этот вопрос о больших базах данных SQLlite.
Важный бит:
Я попытался вставить несколько строк в файл sqlite только с одной таблицей. Когда размер файла составлял около 7 ГБ (извините, я не могу точно сказать, сколько строк) вставки занимали слишком много времени. Я подсчитал, что мой тест для вставки всех моих данных займет около 24 часов, но он не завершился даже после 48 часов.
Используемый образец содержал ~50 ГБ данных, хотя технические характеристики системы не упоминались.