Как лучше всего хранить двоичные файлы, связанные с данными, в вашей базе данных? Тебе следует:
- Хранить в базе данных с блобом
- Хранить в файловой системе со ссылкой в базе данных
- Сохранить в файловой системе, но переименовать в хэш содержимого и сохранить хэш в базе данных
- Что-то, о чем я не думал
Преимущества (1) заключаются (среди прочего) в том, что атомарность транзакций сохраняется. Стоимость заключается в том, что вы можете значительно увеличить требования к хранилищу (и связанные с ним потоковые / резервные копии)
Цель (3) - до некоторой степени сохранить атомарность - если вы можете принудительно установить, что файловая система, в которую вы пишете, не позволяет изменять или удалять файлы и всегда имеет правильный хэш в качестве имени файла. Идея состояла бы в том, чтобы записать файл в файловую систему перед тем, как разрешить вставку / обновление, ссылающееся на хеш - если эта транзакция завершится неудачно после записи в файловую систему, но до DML базы данных, это хорошо, потому что файловая система «притворяется», являясь хранилищем всех возможные файлы и хэши - не имеет значения, есть ли там файлы, на которые нет указаний (и вы можете периодически их очищать, если будете осторожны)
РЕДАКТИРОВАТЬ:
Похоже, что некоторые РСУБД рассмотрели это по-своему - мне было бы интересно узнать, как это делают другие - и особенно в решении для postgres