Re[3]: Способ хранения файлов
От: Baiker  
Дата: 22.02.23 10:49
Оценка: +3 -1 :)
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, Baiker, Вы писали:

B>>Где угодно, только не в самой БД!

vaa>Почему?

vaa>www.npgsql.org large-objects
vaa>microsoft.com

Потому что не всё то зелёное, что летит. ДАЛЕКО не всё, что придумывают офисные "джамшуты" надо бежать реализовывать (яркий пример — EF).

Поначалу кажется да — всё засунули в БД — моногамия и красота! Но когда начнётся наполнение БД, а ты (очевидно) продолжаешь развивать систему, ты очень быстро придёшь к ситуации, когда надо что-то быстро забэкапить, изменить, посчитать, обновить данные, а твоя 10К база из-за large-objects распухла до размеров гигабайта и ты как дурак вынужден ждать по 5 минут операции с бэкапами только потому, что засунул в базу НЕИЗМЕНЯЕМЫЕ большие объекты, которые там нахрен не сдались. И см. ниже:

Sharov>Почему нет, если, например, небольшие файлы 5-10мб типа картинок?

ТЕМ БОЛЕЕ картинки! (к примеру, картинки товаров) Сегодня ты наструячил мегабайтных 3Д картинок, а завтра манагер подходит: "Нам нужен мобильный вебсайт — чтобы все картинки были по 5К". И начинается!... Сначала картинки выгрузи, причём так, чтобы не похерить их ID, затем отдай дизайнеру, он их ужмёт, отдаст тебе, ты ЗАНОВО импортируешь картинки в базу или того хуже — будешь создавать ещё одно поле теперь уже для ужатых картинок, да ещё согласовывать, чтобы ужатая как-то соотносилась с неужатой... ой ё!
Т.е. буквально на ровном месте огребаешь кучу проблем (+ проблемы, которые я описал для vaa). Оно тебе надо?

Я почему так говорю — тоже как вы по-молодости вляпывался во всякие "инновации от M$". И повозившись с нехреновой такой "базой с картинками", плюнул и сделал всё на внешних файлах. В результате база — маленькая, легко и БЫСТРО бэкапится/сжимается, модифицировать её — вообще без проблем (хоть каждый день пересоздавай!), а файлы организовал независимым способом: каждый файл именуется GUID'ом, а затем применяется "партишенинг": первые две буквы имени являются именем подкаталога (от единого корневого), где файлы и лежат:

/base_pic_dir/
/base_pic_dir/01/
/base_pic_dir/01/013485643896593.jpg
/base_pic_dir/AD/
/base_pic_dir/AD/AD42357BC745AF.PNG
/base_pic_dir/AD/AD45938659348.webp


Т.е. имеем распределённую систему файлов, чтобы не хранить миллиард фоток в одном каталоге.
Итого, чтобы мне перенести такую хренову тучу файлов в развёртываемую систему, мне достаточно из сархивировать и скопировать! Причём на любой носитель (не засирая системный с БД). Ну а в базе храним только имена конечных файлов, которые опять же легко переносятся, дополняются и т.п.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.