Size: a a a

2020 April 06

LL

Lama Lover in pro.elixir
Suren Kirakosyan
А в какой будет норм?
Лучше ни в какой. Файлы - это большая нагрузка на сеть. Базы обычно и без файлов очень быстро упираются в максимум по нагрузке и объёму. Эсли ты занимаешься хранением и обработкой файлов (например какой-то аудиосервис), то лучше  хранить в объектных хранилищах с соответствующими оптимизациями. Если файлы нужны просто как статика для сайта (например background-image), то тут можно хранить на вебсервере (допустим там где стоит nginx) или, если их много, сделать cdn
источник

SK

Suren Kirakosyan in pro.elixir
Рассмотрим сценарий, если ваши файлы удаляются из этого места вручную или какими-то парнями-хакерами, вы можете не знать, существует файл или нет. Больно верно?
источник

f

filin49 in pro.elixir
Suren Kirakosyan
Рассмотрим сценарий, если ваши файлы удаляются из этого места вручную или какими-то парнями-хакерами, вы можете не знать, существует файл или нет. Больно верно?
Базу грохнут быстрее, чем файлы
источник

LL

Lama Lover in pro.elixir
Suren Kirakosyan
Рассмотрим сценарий, если ваши файлы удаляются из этого места вручную или какими-то парнями-хакерами, вы можете не знать, существует файл или нет. Больно верно?
Так а какой сценарий использования? Если это статика, то плевать. Если это файлы для пользователя, то пусть они лежат в объектных хранилищах
источник

LL

Lama Lover in pro.elixir
Во-вторых, это глупый сценарий. Если у злоумышленника есть доступ к машине с вебсервером, то если он решит просто удалить картиночки, можно считать что нам повезло
источник

SK

Suren Kirakosyan in pro.elixir
А что насчёт того, что для хранения этих файлов в ФС нужно создавать конструкцию хранения, т.е. папки и пути в них, которое нужно отслеживать, при удалении, скажем если 5 пустых папок, то удалить эти 5 папки и много такого.
источник

SK

Suren Kirakosyan in pro.elixir
Ну может это не картиночки, а какие-то там супер важные файлы...
источник

LL

Lama Lover in pro.elixir
Suren Kirakosyan
А что насчёт того, что для хранения этих файлов в ФС нужно создавать конструкцию хранения, т.е. папки и пути в них, которое нужно отслеживать, при удалении, скажем если 5 пустых папок, то удалить эти 5 папки и много такого.
Зачем какие-то сложные пути? Хранить все файлы с хэшированными именами в одной папке, а базе хранить уже метаданные по файлу (я имею в виду id и всё такое)
источник

f

filin49 in pro.elixir
Lama Lover
Зачем какие-то сложные пути? Хранить все файлы с хэшированными именами в одной папке, а базе хранить уже метаданные по файлу (я имею в виду id и всё такое)
+ md5 к имени и в продакшн. Можно md5 использовать как подпапку, а на уровне nginx делать rewrite. Чтоб сохранялось с нормальным именем.
источник

LL

Lama Lover in pro.elixir
Suren Kirakosyan
Ну может это не картиночки, а какие-то там супер важные файлы...
Тогда хранить их в шифрованном виде где-нибудь в S3 с репликацией
источник

SK

Suren Kirakosyan in pro.elixir
Lama Lover
Зачем какие-то сложные пути? Хранить все файлы с хэшированными именами в одной папке, а базе хранить уже метаданные по файлу (я имею в виду id и всё такое)
Впервые слышу о таком. Я поступал очень явно - брал например пользователя в компании Х и когда он загружал Y файл я создавал в хранилище папку Х/$USER/ и клал файл Y туда. 🥺
источник

LL

Lama Lover in pro.elixir
Suren Kirakosyan
Впервые слышу о таком. Я поступал очень явно - брал например пользователя в компании Х и когда он загружал Y файл я создавал в хранилище папку Х/$USER/ и клал файл Y туда. 🥺
Если ты это писал лет 15 назад на PHP, то это можно понять. Но в 2020 году на elixir это плохая практика
источник

SK

Suren Kirakosyan in pro.elixir
А я хшировал только контент файлов, чтобы определить есть ли изменения в них. Что-то наподобии гита. Но путь никогда не хэшировал
источник

SK

Suren Kirakosyan in pro.elixir
Lama Lover
Если ты это писал лет 15 назад на PHP, то это можно понять. Но в 2020 году на elixir это плохая практика
Ну так сложилось, что я только при таком общении могу понять познакомиться с обстаятельствами 2020 года=))
источник

SK

Suren Kirakosyan in pro.elixir
Короче, что я понял, хэширую путь, кладу в БД, при запросе отправляю файлик.
источник

DI

Dmitry (Deex) Ivanov in pro.elixir
Suren Kirakosyan
Короче, что я понял, хэширую путь, кладу в БД, при запросе отправляю файлик.
А путь зачем хэшировать?
источник

LL

Lama Lover in pro.elixir
Suren Kirakosyan
Короче, что я понял, хэширую путь, кладу в БД, при запросе отправляю файлик.
Не совсем (или я тебя не так понял).
Есть папка .../www/static из которой выдаются статические файлы твоим вебсервером
В папке лежат файлы типа .../www/static/<hash of file><salt>.jpg
В базе лежат
id | resolution | name | filename

Где filename это <hash of file><salt>.jpg
источник

SK

Suren Kirakosyan in pro.elixir
Dmitry (Deex) Ivanov
А путь зачем хэшировать?
Честно я не перевариваю.
источник

SK

Suren Kirakosyan in pro.elixir
Короче, мне нужно время, чтобы это понять.
источник

SK

Suren Kirakosyan in pro.elixir
https://wiki.postgresql.org/wiki/BinaryFilesInDB

Можно это прочесть.
источник