Статьи

Двоичные файлы тоже в базе данных

Один часто повторяющийся совет, который можно увидеть в Интернете: «Не храните двоичные файлы в базе данных. Сохраните указатель на файл и сохраните его на диске ». Причиной этого является то, что хранение двоичных файлов заключается в том, что файловые системы гораздо эффективнее хранят и извлекают файлы, чем базы данных. Что является действительным аргументом, особенно если речь идет об очень больших файлах. Но я думаю, что хранение файлов в базе данных имеет ряд преимуществ, которые могут легко перевесить эту проблему, особенно для динамических сайтов, управляемых данными.

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

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

С точки зрения безопасности также есть огромные преимущества. Если вашему приложению не нужно записывать файлы, вы можете легко запретить его запись на диск, используя разрешения файловой системы. Невозможность записи вредоносных файлов на диск делает невозможным множество эксплойтов. Более того, поскольку вы используете серверный язык для обработки файлов, неавторизованные пользователи не могут совершать рейды на ваши файлы, так как их можно легко пропатчить с помощью вашей обычной безопасности. Кроме того, поскольку никому не нужно загружать файлы, часто можно полностью отключить доступ по FTP. И FTP — примерно такая же небезопасная служба, какая существует сегодня.

Наконец, в зависимости от платформы базы данных, можно сделать очень аккуратный трюк с базой данных для хранения файлов. В Sql Server можно выполнять полнотекстовый поиск документов HTML или Word из коробки. Установка PDF IFilter позволяет выполнять такой же поиск в PDF-файлах. И есть другие фильтры IFilter, доступные для многих видов файлов. Пользователи любят полнотекстовый поиск.

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

Итак, в следующий раз, когда кто-то скажет, что вы без ума от хранения файлов в СУБД, скажите ему, что он без ума от хранения файлов на диске.