Хранить картинки в базе данных или в файловой системе?

Рейтинг: 0Ответов: 3Опубликовано: 16.04.2011

Картинки нужно создавать, удалять, но чаще всего считывать. Подскажите где выше производительность будет: в первом или втором случае?

Update


если учесть те факт что бд это один файл и жёсткий диск подвергается своевременной дефрагментации, то можно говорить что данные будут считываться с одного места на диске, а если их хранить (тоже допустим в дефрагментированной) файловой системе, то всё равно велика вероятность что файлы будут разбросаны как попало. Таким образом на операцию чтения будет затрачиваться дополнительное время нужное для перемещения магнитной головки. Меня интересует именно эта проблема. Или я не прав?

Ответы

▲ 1Принят

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

▲ 1

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

▲ 1

Один ответ уже Вам дали - по причине того, что доступ к файлам БД осуществляется через сервис, скорость доступа будет меньше, чем прямой доступ.

Теперь дальше, давайте представим, что все же у вас много ОЗУ и ваша БД со всеми картинками может быть закеширована. А теперь подумайте, сколько реально у вас ОЗУ (может быть выделено на сервис БД), как часто происходит обращение к одним и тем же изображениям, а как часто к новым (которых нету в кэше). И взвесьте все это с тем временем, которое необходимо, чтобы что-то из кэш удалить и новое поместить. Когда это несколько картинок статических, то почему бы и нет, а когда это база, обновляемая, корректируемая и т.п. Тогда при отсутствии ресурсов это глупо. Не говоря уже о том, а что будет СУБД делать в то время, когда отдает файл, если он большой или добавляет новый? При записи нового файла будет простой, так как таблица будет заблокирована, например.