Работа с файлами, слишком большими для хранения в памяти?

У меня есть файл 20 ГБ, который выглядит следующим образом:

Read name, Start position, Direction, Sequence

Обратите внимание, что прочитанные имена не обязательно являются уникальными.

Например, фрагмент моего файла будет выглядеть

Read1, 40009348, +, AGTTTTCGTA
Read2, 40009349, -, AGCCCTTCGG
Read1, 50994530, -, AGTTTTCGTA

Я хочу иметь возможность хранить эти строки таким образом, чтобы я мог

  1. сохранить файл отсортированным по второму значению
  2. перебрать отсортированный файл

Кажется, что базы данных могут быть использованы для этого.

Документация, кажется, подразумевает, что dbm нельзя использовать для сортировки файла и его перебора.

Поэтому мне интересно, сможет ли SQLite3 сделать 1) и 2). Я знаю, что смогу отсортировать свой файл с помощью SQL-запроса и перебрать набор результатов с помощью sqlite3. Однако смогу ли я сделать это без нехватки памяти на компьютере с 4 ГБ ОЗУ?

2 ответа

Решение

SQLite может делать как 1), так и 2).

Я рекомендую вам попробовать и сообщить о любых проблемах, с которыми вы столкнулись.

При размере страницы по умолчанию 1024 байта размер базы данных SQLite ограничен 2 терабайтами (241 байт). И даже если он может обрабатывать большие базы данных, SQLite хранит всю базу данных в одном файле на диске, и многие файловые системы ограничивают максимальный размер файлов чем-то меньшим, чем это. Поэтому, если вы рассматриваете базы данных такого масштаба, вам было бы неплохо рассмотреть возможность использования механизма базы данных клиент / сервер, который распределяет свое содержимое по нескольким дисковым файлам и, возможно, по нескольким томам.

Посмотрите этот вопрос о больших базах данных SQLlite.

Важный бит:

Я попытался вставить несколько строк в файл sqlite только с одной таблицей. Когда размер файла составлял около 7 ГБ (извините, я не могу точно сказать, сколько строк) вставки занимали слишком много времени. Я подсчитал, что мой тест для вставки всех моих данных займет около 24 часов, но он не завершился даже после 48 часов.

Используемый образец содержал ~50 ГБ данных, хотя технические характеристики системы не упоминались.

Другие вопросы по тегам