Re[3]: Способ хранения файлов
От: · Великобритания  
Дата: 24.02.23 16:48
Оценка: 1 (1) +1
Здравствуйте, vaa, Вы писали:

vaa>·>Если стоит вопрос предпочтения, то предпочту уже то, что уже есть в системе. Если есть субд, то пункт 1 — добавить табличку — легко и просто. Из коробки будут та же система развёртывания, миграции, бэкапов, етс для всей системы.

vaa>·>К следующим пунктам я бы переходил если пункт 1 не тянет по перформансу. И тут уже нужен аккуратный анализ требований и выбор решения, которое их удовлетворяет.
vaa>мне вот тоже кажется таблица это оптимально, правда касательно объемов тут задумался,
vaa> в постгрес 35Тбайт на таблицу. т.е. около 35_000 гигов. не так уже и много, если задуматься.
vaa>т.е. по 10Мб примерно 3,5 млн записей.
Я бы наверное смотрел на соотношение размера данных к файлам.
Если в бд 1G данных и 100T файлов — то явно лучше файлы хранить отдельно, где-нибудь в облаке.
Если в бд 1T данных и 1T файлов, то зачем лишний раз заморачиваться.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Способ хранения файлов
От: Sharov Россия  
Дата: 24.02.23 20:06
Оценка:
Здравствуйте, Baiker, Вы писали:

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

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

Все это хорошо, но как быть с консистентностью и\или транзакционностью? Если кто-то случайно куда-то дел
файлы в фс, то база об этом не будет знать, а когда блобы в бд, то это "случайно" просто так не сделаешь.
Я сам хранил файлы во вне, а в бд хранил метаданные. Но вот как-то такой дизайн, когда за одни и те же
сущности (файл+метаданные) отвечают 2 разных, несогласованных механизма -- бд и фс. Ну вот как-то
не спокойно от такой организации. А вот когда все в базе -- уже спокойнее, уже один механизм взаимодействия
для всего.
Кодом людям нужно помогать!
Re: Способ хранения файлов
От: Anton Batenev Россия https://github.com/abbat
Дата: 25.02.23 09:28
Оценка: +4
Здравствуйте, vaa, Вы писали:

vaa> Обычное CRUD-приложение с бизнес-логикой. БД типа постгрес, мс скл, файрберд.

vaa> Где предпочитаете хранить файлы (pdf, pic, binary):

В сколь-либо нагруженном приложении файлы всегда хранятся отдельно от БД (в S3 например, краевой случай внутреннего устройства S3-подобных систем оставим за скобками). Во всех остальных случаях без разницы (как удобнее) — цена неправильного решения очень низкая, всегда можно относительно быстро переделать.
Re[5]: Способ хранения файлов
От: Baiker  
Дата: 26.02.23 01:00
Оценка: -2
Здравствуйте, Sharov, Вы писали:

S>Все это хорошо, но как быть с консистентностью и\или транзакционностью? Если кто-то случайно...


Это называется "высасывать из хера проблемы". В большинстве случаев если ты хранишь файл — всё, это конечная, "запечатаная" сущность. Её не надо изменять, максимум — удалить полностью из системы (из базы и диска). Ну а проблемы "файл куда-то делся" — извини, ИТ — это тебе не женская сумочка, тут порядок нужен!
Re[5]: Способ хранения файлов
От: Baiker  
Дата: 26.02.23 01:03
Оценка: -1
Здравствуйте, vaa, Вы писали:

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


B>> распухла до размеров гигабайта


vaa>Честно говоря, не понял размера проблемы


Если ты из Эстонии — то да, сложно объяснить челу, что ждать полчаса бэкап — это долго!

vaa>тут пишут что это антипаттерн(хранить вне субд)

vaa>https://github.com/boralp/sql-anti-patterns

Ну а у меня на заборе ***й написано — а там дрова лежат! (ц) Дальше будем обсуждать непонятные источники?
Re[7]: Способ хранения файлов
От: Baiker  
Дата: 26.02.23 01:04
Оценка: -1 :)
Здравствуйте, ·, Вы писали:

(детская ахинея поскипана)

·>Чем абстрактный блоб принципиально от файла отличается?


Тем, что редакторы, конвертеры, вьюеры и т.п. НЕ УМЕЮТ работать с "блобами".
Re[6]: Способ хранения файлов
От: vaa  
Дата: 26.02.23 02:53
Оценка: -1
Здравствуйте, Baiker, Вы писали:


B>Если ты из Эстонии — то да, сложно объяснить челу, что ждать полчаса бэкап — это долго!


Без шуток, складывается впечатление что наличие консистентной копии базы вместе с файлами для вас не важно.
Ну и без файлов не у всех же базы игрушечные.))
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Способ хранения файлов
От: 4058  
Дата: 26.02.23 07:45
Оценка: +1
Здравствуйте, ·, Вы писали:

·>Чем абстрактный блоб принципиально от файла отличается?


Тем, что неудобно и ресурсозатратно работать с "большими" блобами, в зависимости от ограничений конкретной БД на размер LOB и возможностей LOB-стримминга. Я ранее упоминал
Автор: 4058
Дата: 21.02.23
случай, с PDF-файлами размером > 4Гб. Плюс к этому распухание журнала транзакций (надо же как-то ACID обеспечивать) и распухание самой БД, которую становится проблематично бэкапировать.
Например, БД представлена сотней таблиц, некоторые таблицы содержат около 10-100 млн записей, всё это хозяйство занимает около 200 Гб, что позволяет с необходимой частотой делать бэкапы, реплики и многое другое, чего например проблематично делать с хранилищем файлов, которое занимает под сотню терабайт.
Re[8]: Способ хранения файлов
От: · Великобритания  
Дата: 26.02.23 12:45
Оценка: +1
Здравствуйте, 4058, Вы писали:

4>·>Чем абстрактный блоб принципиально от файла отличается?

4>Тем, что неудобно и ресурсозатратно работать с "большими" блобами, в зависимости от ограничений конкретной БД на размер LOB и возможностей LOB-стримминга. Я ранее упоминал
Автор: 4058
Дата: 21.02.23
случай, с

Если ты делаешь на файлах, у тебя рано или поздно возникнут те же вопросы и с целостностью, и с бэкапами, и с DR, &c. Ну будешь эту же ACID обеспечивать вручную, сравнимым по затратам ресурсов способом, магически оно само не заработает.

4>PDF-файлами размером > 4Гб. Плюс к этому распухание журнала транзакций (надо же как-то ACID обеспечивать) и распухание самой БД, которую становится проблематично бэкапировать.

Прикольный случай, конечно. А что потом с этим файлом делать? Чую, что его и в pdf-reader открыть будет проблематично... не говоря уж о том, что прочитать никто не сможет столько.

4>Например, БД представлена сотней таблиц, некоторые таблицы содержат около 10-100 млн записей, всё это хозяйство занимает около 200 Гб, что позволяет с необходимой частотой делать бэкапы, реплики и многое другое, чего например проблематично делать с хранилищем файлов, которое занимает под сотню терабайт.

Да, я уже где-то выше написал, адекватность решения зависит от соотношения размеров данных и файлов.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[9]: Способ хранения файлов
От: 4058  
Дата: 27.02.23 06:21
Оценка:
Здравствуйте, ·, Вы писали:

·>Если ты делаешь на файлах, у тебя рано или поздно возникнут те же вопросы и с целостностью, и с бэкапами, и с DR, &c. Ну будешь эту же ACID обеспечивать вручную, сравнимым по затратам ресурсов способом, магически оно само не заработает.


Здесь транзакционные ФС в помощь, либо специализированные хранилища (S3), либо движки на уровне самих БД (например FILESTREAM в MSSQL, но там свои ограничения) ну или по простому, в рамках транзакции БД делать изменения в БД и ФС.

4>>PDF-файлами размером > 4Гб. Плюс к этому распухание журнала транзакций (надо же как-то ACID обеспечивать) и распухание самой БД, которую становится проблематично бэкапировать.

·>Прикольный случай, конечно. А что потом с этим файлом делать? Чую, что его и в pdf-reader открыть будет проблематично...

Как раз у reader-ов проблем с этим нет, т.к. pdf изначально расчитан на поточную обработку, в общем в память сразу весь документ не потянет, проблема только с трансфером.

·>не говоря уж о том, что прочитать никто не сможет столько.


История приблизительно такая, суд запросил материалы для проведения экспертизы, контора у которой это запрашивали является крупным ритейлером, в частности от них требовалось приложить какие-то древние каталоги всей продукции, исходников (каталогов) видимо не сохранилось, в итоге они отсканировали эти 10-ки тысяч страниц и запихнули в один pdf-файл.

·>Да, я уже где-то выше написал, адекватность решения зависит от соотношения размеров данных и файлов.


Я тоже собственно с этого и начал, т.к. совсем универсального решения нет.
Re[10]: Способ хранения файлов
От: · Великобритания  
Дата: 27.02.23 18:22
Оценка: 3 (1) +1
Здравствуйте, 4058, Вы писали:

4>·>Если ты делаешь на файлах, у тебя рано или поздно возникнут те же вопросы и с целостностью, и с бэкапами, и с DR, &c. Ну будешь эту же ACID обеспечивать вручную, сравнимым по затратам ресурсов способом, магически оно само не заработает.

4>Здесь транзакционные ФС в помощь, либо специализированные хранилища (S3), либо движки на уровне самих БД (например FILESTREAM в MSSQL, но там свои ограничения) ну или по простому, в рамках транзакции БД делать изменения в БД и ФС.
Угу. С чем боролись, на то и напоролись: "неудобно и ресурсозатратно работать". Т.е. закат солнца вручную. Впрочем, если по задаче сразу ясно, что acid для файлов не нужен, то может и пойдёт.

4>>>PDF-файлами размером > 4Гб. Плюс к этому распухание журнала транзакций (надо же как-то ACID обеспечивать) и распухание самой БД, которую становится проблематично бэкапировать.

4>·>Прикольный случай, конечно. А что потом с этим файлом делать? Чую, что его и в pdf-reader открыть будет проблематично...
4>Как раз у reader-ов проблем с этим нет, т.к. pdf изначально расчитан на поточную обработку, в общем в память сразу весь документ не потянет, проблема только с трансфером.
Ну откроет документ, а как там что-то найти почитать? Придётся по нему как-то туда-сюда прыгать и начнутся тормоза.

4>·>не говоря уж о том, что прочитать никто не сможет столько.

4>История приблизительно такая, суд запросил материалы для проведения экспертизы, контора у которой это запрашивали является крупным ритейлером, в частности от них требовалось приложить какие-то древние каталоги всей продукции, исходников (каталогов) видимо не сохранилось, в итоге они отсканировали эти 10-ки тысяч страниц и запихнули в один pdf-файл.
Т.е. по сути это ошибка в UX проектировании, когда система позволила загрузить в себя такое. По уму они должны были поделить это на вменяемые юзабельные куски, и каждый кусок как-то аннотировать — какой каталог какой продукции и т.п.
Что теперь делать с этим pdf — неясно, прям саботаж какой-то делопроизводства.

4>·>Да, я уже где-то выше написал, адекватность решения зависит от соотношения размеров данных и файлов.

4>Я тоже собственно с этого и начал, т.к. совсем универсального решения нет.
Ну да. А мой поинт был в том, что если задача на данный момент толком неясна, то начать нужно с простого и надёжного — с блобов. А потом отрефакторить, если что.

Вот тут кстати вполне неплохо подытожено: https://wiki.postgresql.org/wiki/BinaryFilesInDB
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Способ хранения файлов
От: Firstborn Латвия  
Дата: 28.02.23 03:24
Оценка:
Здравствуйте, 4058, Вы писали:

4>Из практики, порой приходилось сталкиваться с PDF-ками на 20К страниц, объёмом в несколько гигабайт , это был ответ на запрос суда с полным перечнем запрашиваемых данных для проведения судебной экспертизы.

Сразу представились требования к системе в стиле "ну и ещё нужно чтобы корректно работало с приложенными файлами, как правило это будут PDF документы", а по факту прилетает такое вот 20К чудо )) Как оно вообще, хоть каким-то софтом без глюков вообще открывалось на просмотр?
Re[3]: Способ хранения файлов
От: 4058  
Дата: 28.02.23 06:59
Оценка: 1 (1)
Здравствуйте, Firstborn, Вы писали:

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


4>>Из практики, порой приходилось сталкиваться с PDF-ками на 20К страниц, объёмом в несколько гигабайт , это был ответ на запрос суда с полным перечнем запрашиваемых данных для проведения судебной экспертизы.

F>Сразу представились требования к системе в стиле "ну и ещё нужно чтобы корректно работало с приложенными файлами, как правило это будут PDF документы", а по факту прилетает такое вот 20К чудо ))

Когда разрабатывали систему (в 2010-м) на подобные вещи особо не закладывались, и это мягко скажем "редкий случай", сейчас специально проверил, на массиве из 5 млн pdf-документов (накопленных за 12+ лет), всего 600 имеют более 1К страниц, и всего 10 более 10К. Но в данном случае дело не в кол-ве страниц (для pdf это не проблема), а в размере файла, т.к. в данном случае pdf выступил в виде контейнера для отсканированных материалов (массив jpeg-ов в 300DPIx24bit). Грубо говоря 20К страниц * 200 кб (средний размер скана) ~ 4 Гб. Сейчас специально проверил, на данный момент самый "тяжелый" случай это: 19К страниц общим объемом 6.5 Гб.

F>Как оно вообще, хоть каким-то софтом без глюков вообще открывалось на просмотр?


Как раз с этим проблем нет, условный Adobe Reader не тянет же его полностью в оперативку. Только что проверил, с шары открылся за 30 секунд, оперативки скушал около 80 мб, с навигацией по страницам проблемы нет.
Но самое интересное не это, в системе имеется процесс, осуществляющий над всем этим безобразием OCR (с использованием джижка ABBYY FineReader), собственно так я и узнал, что у нас бывают подобные "документы", когда обработка одного такого документа заняла заметно больше ожидаемого времени.
Re[6]: Способ хранения файлов
От: ути-пути Россия  
Дата: 28.02.23 08:01
Оценка:
Здравствуйте, Baiker, Вы писали:

B>>> распухла до размеров гигабайта


vaa>>Честно говоря, не понял размера проблемы


B>Если ты из Эстонии — то да, сложно объяснить челу, что ждать полчаса бэкап — это долго!


Полчаса на бэкап гигабайта? Это, наверное, эстонский компьютер?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[6]: Способ хранения файлов
От: ути-пути Россия  
Дата: 28.02.23 08:14
Оценка: +3
Здравствуйте, Baiker, Вы писали:

B>Это называется "высасывать из хера проблемы". В большинстве случаев если ты хранишь файл — всё, это конечная, "запечатаная" сущность. Её не надо изменять, максимум — удалить полностью из системы (из базы и диска).


Выделенное надо делать транзакционно. Как и добавление. И весь механизм таких транзакций придется обеспечивать врукопашную.

B>Ну а проблемы "файл куда-то делся" — извини, ИТ — это тебе не женская сумочка, тут порядок нужен!


Это может произойти как раз на этапе добавления-удаления. Запись в базе изменилась, а файл не успел, или наоборот. Добавить сюда конкурентные операции, и все станет еще веселее.
А еще надо делать согласованные бэкапы БД и файлов. И как ты будешь их делать я вообще плохо представляю, вряд ли для этого есть какие-то готовые средства.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[9]: Способ хранения файлов
От: Ночной Смотрящий Россия  
Дата: 28.02.23 09:36
Оценка: +1
Здравствуйте, ·, Вы писали:

·>Если ты делаешь на файлах, у тебя рано или поздно возникнут те же вопросы и с целостностью, и с бэкапами, и с DR, &c. Ну будешь эту же ACID обеспечивать вручную, сравнимым по затратам ресурсов способом, магически оно само не заработает.


Все так, но есть один нюанс — стоимость хранения в SaaS DB может быть на порядок выше стоимости хранения в каком нибудь Azure Storage/AWS S3. Стоит ли ACID и удобство этих денег — очень большой вопрос.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Способ хранения файлов
От: · Великобритания  
Дата: 28.02.23 10:20
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>·>Если ты делаешь на файлах, у тебя рано или поздно возникнут те же вопросы и с целостностью, и с бэкапами, и с DR, &c. Ну будешь эту же ACID обеспечивать вручную, сравнимым по затратам ресурсов способом, магически оно само не заработает.

НС>Все так, но есть один нюанс — стоимость хранения в SaaS DB может быть на порядок выше стоимости хранения в каком нибудь Azure Storage/AWS S3. Стоит ли ACID и удобство этих денег — очень большой вопрос.
Беда в том, что этот вопрос иногда даже не ставится, т.к. проблемы не осознаются (см. "нагородил непонятную кучу проблем" выше по топику). И эти сэкономленные деньги потом ВНЕЗАПНО придётся потратить десятикратно, когда что-то потеряется или поломается.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Способ хранения файлов
От: Baiker  
Дата: 04.03.23 16:42
Оценка: -2 :)
Здравствуйте, vaa, Вы писали:

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



B>>Если ты из Эстонии — то да, сложно объяснить челу, что ждать полчаса бэкап — это долго!


vaa>Без шуток, складывается впечатление что наличие консистентной копии базы вместе с файлами для вас не важно.

vaa>Ну и без файлов не у всех же базы игрушечные.))

Складывается впечатление, что ты наступил в говно, но пытаешься тут стоять "весь в белом". Ты спросил про базы — тебе ответили. Если ты не понимаешь причин и пытаешься продавливать своё явно дилетантское мнение (да ещё прибегая к паршивой демагогии, разговаривая ВМЕСТО собеседника) — просто вали нахер, твоё самовозвышение интересно только тебе самому.
Re[9]: Способ хранения файлов
От: Baiker  
Дата: 04.03.23 16:50
Оценка: -1 :)
Здравствуйте, ·, Вы писали:

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


4>>·>Чем абстрактный блоб принципиально от файла отличается?

4>>Тем, что неудобно и ресурсозатратно работать с "большими" блобами, в зависимости от ограничений конкретной БД на размер LOB и возможностей LOB-стримминга. Я ранее упоминал
Автор: 4058
Дата: 21.02.23
случай, с


·>Если ты делаешь на файлах, у тебя рано или поздно возникнут те же вопросы и с целостностью, и с бэкапами, и с DR, &c. Ну будешь эту же ACID обеспечивать вручную, сравнимым по затратам ресурсов способом, магически оно само не заработает.


Ещё раз для тех, кто только похмелился и не полностью въехал в тему (или проигнорировал её самую интересную часть):
КАК ПРАВИЛО "файлы в базе" не являются такими же "данными", как и записи. Файл — это некая одноразовая/readonly сущность, которая живёт, пока её не затребуют. Каталог фильмов, музыки, фотки сотрудников, рентгены больных... никто такие вещи не меняет без веской причины. Запись — меняют, сам файл — нет.
Соответственно, всё, что требуется от такого хранилища — иметь надёжный бэкап. Более того — иногда можно даже допустить его потерю (те же ушлёпские ролики тиктока).
Отсюда и мой совет выше: НЕ ХРАНИТЬ ФАЙЛЫ В БАЗЕ! Это (хранение в базе) — глупое решение, плачевные последствия которого приходят слишком поздно, чтобы что-то менять.
Отредактировано 04.03.2023 16:54 Baiker . Предыдущая версия .
Re[10]: Способ хранения файлов
От: · Великобритания  
Дата: 04.03.23 18:50
Оценка: -1
Здравствуйте, Baiker, Вы писали:

B>КАК ПРАВИЛО "файлы в базе" не являются такими же "данными", как и записи. Файл — это некая одноразовая/readonly сущность, которая живёт, пока её не затребуют. Каталог фильмов, музыки, фотки сотрудников, рентгены больных... никто такие вещи не меняет без веской причины. Запись — меняют, сам файл — нет.

У меня все ходы записаны: "отдай дизайнеру, он их ужмёт,". Так что проспись потом приходи и вырази свою мысль, если она есть, твои переобувания в прыжке мало кому интересны.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.