Яке найкраще місце для зберігання двійкових файлів, пов’язаних із даними у вашій базі даних? Якщо ви:
- Зберігати в базі даних з крапом
- Зберігати у файловій системі за посиланням у базі даних
- Зберігати у файловій системі, але перейменувати на хеш вмісту та зберігати хеш у базі даних
- Щось я не думав
Перевагами (1) є (серед інших) те, що збережена атомність транзакцій. Вартість полягає в тому, що ви можете значно збільшити потреби в сховищі (і пов'язаних з ними потокових / резервних копіях)
Мета (3) - зберегти атомність до певної міри - якщо ви можете встановити, що файлова система, в яку ви пишете, не дозволяє файли змінюватись та видаляти, а завжди має правильний хеш як ім'я файлу. Ідея полягала б у тому, щоб записати файл у файлову систему, перш ніж дозволити вставити / оновити посилання на хеш - якщо ця транзакція не вдасться після запису файлової системи, але перед DML бази даних, це нормально, оскільки файлова система «підробляє» як репозиторій усіх можливі файли та хеші - неважливо, чи є там деякі файли, на які не вказано (і ви можете періодично їх очищати, якщо будете уважні)
Редагувати:
Схоже, деякі RDBMS поширюють це на свої індивідуальні способи - мені було б цікаво дізнатись, як це роблять інші - і особливо в рішенні для постгресів