Где и как хранить множество файлов разного размера?
Есть много файлов разного размера (в сжатом виде от 1КБ до 100Mб) . Файлы - текстовые логи трафика пользователей, сжатые gzip. 1 файл - логи одного пользователя за 1 день.
Один день - примерно 60k файлов (в сжатом виде порядка 15Гб). Сейчас храню их в директориях по дням, внутри дня разбиваю по директориям по префиксам. С одной стороны, удобно - по любому пользователю можно быстро получить логи. Но работать с массой таких файлов не удобно - копируются медленно, фс работает медленно. Учитывая, что на разделе хранятся логи за последние 3-4 месяца, получается 7-8 млн файлов.
Ищу такое хранилище (или способ организации), чтобы сократить количество файлов для облегчения работы с ними, при этом чтобы было сжатие. Рассматривал вариант сохранять файлы в PostgreSQL (логи в поле типа text, чтобы работало сжатие), там файлов меньше получается, но проблема в записи больших файлов - текстовый лог размером в 1Гб не получилось записать - не хватает памяти скрипту (писал на питоне).
Есть ли какие-то другие варианты хранения такого рода файлов?
Для решения задачи хранения логов решил использовать ClickHouse от Яндекса. Колоночность, сжатие и быстрый доступ позволяет удобно работать с данными: можно быстро получать весь трафик по конкретному пользователю. Физически создается не много файлов, можно бекапить прямо эти файлы (отключив их от базы). На данный момент для меня это оптимальное решение.
Спасибо, интересные решения. Но у HistoryDB API только под C либо через HTTP. Ни то, ни другое не подходит. Сам по себе Elliptics для меня несколько избыточен, т.к. распределенности не нужно, зато нужна возможность резервного копирования (чтобы взять один большой файл со всеми логами и записать его на стриммер). А вот то, что использует Elliptics в качестве хранилища (eblob) - это уже почти то, что мне нужно. Правда, там тоже API только для С, а мне нужно для Python.
В общем, получается, мне нужен аналог Eblob, работающий с Python.
У эллиптикса есть API на пайтон. doc.reverbrain.com/elliptics:api-python.
В целом я вас понял, решения не совсем подходят, просто предполагал что нужен постоянный доступ к полному объему данных.