@viktorov_aa

Какую БД выбрать для маленького файлового сервиса?

Я хочу сделать приложение на python(на Fastapi), которое будет работать примерно так:
Пользователи запускают задание, которое выгружает тяжелый отчет в файловую систему на сервере, после чего получают уведомление на почту с уникальной ссылкой. При переходе по ссылке автоматически скачивается файл.

Мне необходимо хранить информацию:
1. Связь ссылки с файлом в файловой системе
2. Историю скачиваний

Возможно, иногда мне надо будет чистить старые файлы(и соотвественно ссылки) массово(например старше 30 или 7 дней).
Ожидаю до выгрузки нескольких десятков тысяч файлов в месяц.

Посоветуйте, какую БД стоит использовать для таких целей? И почему именно ее?
  • Вопрос задан
  • 409 просмотров
Решения вопроса 1
@iddqda
network engineer, netdevops
FastAPI предполагает работу с БД через ORM в частности SQLAlchemy
Который предоставляет слой абстракции.
поэтому не так важно какая база будет использоваться.

Начните с SQLite а потом, если не хватит, легко смигрируете на мускуль или постгрес
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Любую, какую лучше знаете. На таких количествах любая БД будет работать без проблем.
Ответ написан
Любую реляционную: MySQL, Postgresql, Firebird. Первую точно можно настроить на малое потребление памяти, если необходимо.
При использовании их легко вырасти, не меняя СУБД.
В долгосрочной перспективе SQLite не подходит.
Ответ написан
Комментировать
@Firsov36
full-stack web developer
Свою БД на основе файлов. Не нужно устанавливать лишнего софта с функционалом, который вам не нужен, а описанные задачи в файлах можно организовать.
Ответ написан
gecube
@gecube
системный администратор, программист... все дела..
Такая задача идеально решается при помощи s3 или любого объектного хранилища. Оно имеет в себе функции ограничения доступа, удаления старых файлов, и, самое главное, - не нужно самому эти отчёты прокачивать через свой хттп сервер - можно давать ссылку напрямую на хранилище прямо на конкретный отчет.

Для хранения каких-либо метаданных приложения отлично подходит универсальная СУБД PostgreSQL
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Вопрос в перспективе тянет на экспертную систему по выбору БД.

При данной постановке - можно брать любую документно-ориентированную. Все одинаково подходят.
Но если основной контент (80% берем по Паретто) это файлы - то можно брать Amazon S3, в дальнейшем с перспективой трансформировать это в DynamoDb если понадобятся транзакции или в Amazon Document Db (он же Mongo) если понадобится тонкая работа с атрибутами документов (или файлов).

Автор должен понять что в это вопросе нет единого правильного решения. Есть просто некая сравнительная табличка где есть набор фичей с одной стороны и набор DBMS с другой и нет такого покрытия которое бы закрыло ВСЕ фичи.
Ответ написан
Комментировать
@dimuska139
Backend developer
А зачем вообще файлы и база данных? Эту задачу можно решить гораздо проще. Юзер запускает тяжелую задачу, которая строит отчет. Отчет кладется в кеш с временем жизни 30 дней (ну или сколько нужно). Ключом в кеше является уникальное значение, которое юзер получает в ссылке в письме. То есть задача сильно упрощается:
  1. Нет базы
  2. Не нужно писать логику удаления отчетов, потому что они будут удалятся автоматически при протуханиии кеша
  3. Не нужно хранить файлы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы