Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как уменьшить количество запросов к БД 
:(
    Опции темы
Parallelogram
Дата 6.2.2015, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 22.1.2013

Репутация: нет
Всего: нет



Здравствуйте, у меня есть цикл который выводит картинки, а alt='' и title='' должны будут выводиться из БД. Я могу только сделать так, чтобы каждую итерацию отправлялся запрос к БД, но это очень много обращений к базе. Как можно оптимизировать этот процесс?
Код

for ($i = count($files)-1; $i >= 0; $i--) {
if ($files[$i]){
echo "<img src='$files[$i]' alt='' title=''/><br>";}
}

PM MAIL   Вверх
baldina
Дата 6.2.2015, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



делать один запрос к базе, а в цикле обрабатывать результат запроса
PM MAIL   Вверх
Vardoulacha
Дата 7.2.2015, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: 7
Всего: 8



Тоже пару дней назад вставала подобная задача, нужно было при обработке строк находить в них определенные значения а потом лезть в базу и искать по нему другое значение (правильное). Проводил анализ по скорости и занимаемой памяти.

К сожалению результат исследования затерялся, но я помню что победило такое решение (сразу адаптировано под задачу автора топика):
1. Выбираем всю таблицу с альтами и тайтлами
2. Загоняем результат в массив
3. Далее перебирая файлы подставляем альты выбирая их из массива по ключу с именем файла

Минус этого решения: жрет много памяти (мой массив жрал под 30 мегабайт за раз)
Плюсы: оно очень быстрое

Так что такое решение гораздо эффективнее постоянных запросов к БД, т.к. память увеличит вообще не проблема, а вот скорость уменьшить никак не удастся
PM MAIL   Вверх
whatisnot
Дата 7.2.2015, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



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

Это сообщение отредактировал(а) whatisnot - 7.2.2015, 15:29
PM MAIL   Вверх
s0lman
Дата 9.2.2015, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Цитата(Vardoulacha @  7.2.2015,  05:26 Найти цитируемый пост)
мой массив жрал под 30 мегабайт за раз

Фигассе, это сколько же картинок у вас на странице?


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Vardoulacha
Дата 9.2.2015, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: 7
Всего: 8



Цитата(s0lman @  9.2.2015,  16:20 Найти цитируемый пост)
Фигассе, это сколько же картинок у вас на странице? 

я же писал что пример адаптирован под задачи автора топика, у меня были другие данные, всего то массив порядка 6000 записей )))
PM MAIL   Вверх
sQu1rr
Дата 9.2.2015, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 2
Всего: 13



Цитата(Vardoulacha @  7.2.2015,  03:26 Найти цитируемый пост)
2. Загоняем результат в массив
3. Далее перебирая файлы подставляем альты выбирая их из массива по ключу с именем файла

Цитата(Vardoulacha @  7.2.2015,  03:26 Найти цитируемый пост)
Плюсы: оно очень быстрое

Если как вы описали, то быстрым быть не может.
Для каждого файла придется перебирать в среднем N/2 строчек массива, что есть линейная сложность. Если файлов всего N получаем квадрат. Где это быстро?
Единственное, то что нужно минимизировать запросы к базе, что понятно, все скинуть в один массив и сразу.
А далее по ключу имени файла построить дерево - тот-же ассициотивный массив, и вот по нему искать.
Извнияюсь если вы именно это и имели ввиду (пункт 3 звучит именно так), но это не то что у вас написано


Цитата(Vardoulacha @  9.2.2015,  15:50 Найти цитируемый пост)
я же писал что пример адаптирован под задачи автора топика, у меня были другие данные, всего то массив порядка 6000 записей ))) 

Цитата(Vardoulacha @  7.2.2015,  03:26 Найти цитируемый пост)
 (мой массив жрал под 30 мегабайт за раз)

5 мегабайт запись? что вы там храните? smile
PM MAIL Skype GTalk   Вверх
evilice
Дата 12.2.2015, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 27.11.2008

Репутация: нет
Всего: нет



Я не уверен, что правильно понял что именно автор имел в виду. Но попробую предположить следующее:
  • Если список выводимых картинок формируется запросом к БД, то почему бы не воспользоваться join-ом? Один запрос, один цикл.
  • Если же список файлов генерится каким-то другим способом, например простым сканом директории, то имя файла (по идее) должно быть ключом в таблице c title и alt. Таким образом можно собрать строку с именами файлов и вставить в запрос типа:
    Код

    select * from `images` where `img` in ('1.jpg', '2.png'...)

    Ну и потом запускаем второй цикл уже с новыми данными. Итого получается два цикла и один запрос к БД

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.