• Как правильно хранить файлы, фото, видео?

    @rPman
    Самое простое и правильное - в файле, как есть, для удобства обслуживания в файловой системе, контейнер которой отделен от всего остального (лучше отдельный раздел или диск, но при особой бедности - файл, который можно примонтировать в любой фс, например в windows это .vhd/.vhdx образы, а в linux вообще просто образ диска в raw формате), зачем отдельное устройство? - для упрощения обслуживания, когда там будет миллион файлов... в linux настоятельно рекомендую пользоваться cow fs (btrfs/zfs/xfs) ради встроенных бесплатных транзакций на основе снапшотов, плюс инкрементальные бакапы эффективно делать.

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

    Во многих случаях рекомендуется не хранить много (десятки тысяч) файлов в одном каталоге, отсюда сразу напрашивается способ - если имя файла состоит из цифр (или hex или вообще base64, на выбор) то разбив его на фиксированной длины части можно использовать их как имена каталогов, последняя часть - имя собственно файла в них (типа /datastore/0d6a/011fc/0012.jpeg).

    Достоинства
    - для web, файлы очень эффективно могут быть отданы веб сервером (при необходимости права доступа разруливаются basic auth либо временными симлинками, хз что дороже)
    - с файлами могут работать огромное количество утилит, поиск, копирование, редактирование, просмотр.. напрямую, когда как с любым другим хранилищем сначала файл придется от туда извлечь, т.е. понадобится соответствующий инструмент

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

    p.s. ну или вот qna.habr.ru/q/10694/#answer_46206
    Ответ написан
    Комментировать
  • Как правильно хранить файлы, фото, видео?

    firedragon
    @firedragon
    Senior .NET developer
    правильно хранить в файловой системе DIXY.
    Это произрастает из самой сути вещей, файлы в файловой системе, данные в бд.
    Взрослые бд могут прожевать 10 гигабайт, для общеупотребительных это проблема. Если что я про бэкапы. При желании поищите как восстановить большой дамп MySql.
    Кроме того есть проблема лицензирования. Да и места больше занимает.

    Второй вопрос оверхед на извлечение, любой веб сервер практически не напрягая процессор забьет весь канал статикой, с базой данных это совсем не так
    Ответ написан
    Комментировать
  • Как сделать скрин области жкрана на C#?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Скриншот части экрана делается так:
    1. Делается полный скриншот рабочего стола
    2. Создается окно поверх всех окон, которое отображает в полный размер полученный снимок (фулскрин, без рамок)
    3. Юзер выбирает область
    4. Вырезается выбранная область и сохраняется

    Ты можешь это проверить, запустив на фоне видео и нажав Win + Shift + S (на win10). Картинка замрёт.
    Конечно, можно сделать иначе, просто отобразив окно фулскрин, которое затемнит немного рабочий стол и даст выбрать область, но момент может быть упущен (в том же видео, например)
    Ответ написан
    1 комментарий