Что php делает быстрее: парсит папку или БД?

Короткий вопрос в шапке, вот развернутый.
Есть галерея на сайте. Она разбита на альбомы. Выбираешь альбом - показываются его фотки.
Что быстрее?
1) Создать две таблицы в БД ля альбомов и фотографий к ним с отношением "один ко многим". И читать эти таблицы при каждом клике по альбому.
2) в таблице хранить только информацию по альбомам, а на сервере хранить фотографии в папках под именами id альбомов. Потом в нужный момент брать id альбома из БД и читать соответствующую папку.
  • Вопрос задан
  • 3222 просмотра
Пригласить эксперта
Ответы на вопрос 8
Anonym
@Anonym
Программирую немного )
Чтение диска - очень затратная и медлительная операция, даже если это SSD. А если в каталоге много файлов, то php еще и скушает вам всю память.
Такие вещи обычно делаются по следующему алгоритму:
1. Храним в БД
2. При чтении берем данные из кэша (ооооочень быстро)
2.1. Если в кэше нет, читаем БД и сохраняем в кэш
3. При записи инвалидируем кэш

В принципе, можно и не хранить в БД, а читать ФС и записывать в кэш. Но тогда непонятно, когда инвалидировать кэш.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
быстрее - доступ к памяти. Так что БД в некоторых случаях выигрывают (за счет кеширования в памяти результатов выборок).
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
БД позволит хранить дополнительные атрибуты фотографий - описание, порядок показа, размеры.
Ответ написан
@NewTypes
На себя
Когда у меня возникают вопросы касаемо производительности, я делаю простую штуку - увеличиваю количество операций от 1000 и более (число итераций через цикл), сначала и в конце скрипта выставляю временные метки microtime выводимые через echo и запускаю все это дело, чтобы позже глянуть, что заняло у меня больше времени (доступ 1000+ раз к диску на чтение или БД). Фиг знает, скажется ли результат работы основываясь на ОС и дисковой системе, но думаю разница будет не существенна.
Ответ написан
@zvorygin
Если учесть что файловая система(ФС) это тоже база данных в каком-то смысле, и даже структуры хранения у них одинаковые, я не удивлюсь если выяснится, что файловая система быстрее.

В случае автора, мне кажется, БД будет быстрее - т.к. сравниваются БД + ФС (второй вариант) против БД.
Ответ написан
Файлы будут быстрее в любом случае.

К файлам обращение идёт напрямую; ФС их кэширует. А к базе требуется сначала подключиться, что требует времени и создаёт нагрузку.
Ответ написан
В БД вы можете использовать ключи, кеш, фильтры и прочее.
В ФС - вы пляшете от скорости диска.

Я Вам рекомендую использовать БД, если очень хочется - SQLite, + в самом приложении хранить кеш в оперативной памяти, apc, к примеру.

Это, соответственно, если у фотографий есть аттрибуты, которые вы храните в бд.
Если фотография является только фотографией, тогда конечно имеет смысл думать о ФС.

И в том и другом случае используйте кеш приложения. Оперативная память быстрее запроса к БД и парсинга ФС
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы