Перейти к содержимому


Фото

[2.*] Модуль кеширования MySQL запросов


  • Чтобы отвечать, сперва войдите на форум
39 ответов в теме

#1 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 26.10.2014 - 17:53

Отсутствие системы кеширования и большое количество запросов к Базе Данных создаваемых как самой CMS Simpla, так и сторонними модулями может привести к регулярной ошибке MySQL сервера "Too many connections" или любезному отключению аккаунта хостинг провайдером (для экономии ресурсов сервера) с намеком на переход на  VPS или выделенный сервер. 

 

Особенно это касается интернет-магазинов база данных которых переваливает за 1000 товарных позиций и средней посещаемости ресурса от 500чел/сут.

 

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

Теперь не стоит боятся большого количества запросов. :)

 

Модуль кеширования MySQL запросов:

  1. Автоматическое кеширование всех запросов.
  2. Отслеживает изменения в таблицах интернет-магазина и удаляет связанные с этими таблицами кеш-файлы. (Благодаря чему, у вас всегда будет актуальный кеш запроса)
  3. В новой версии нет ограничений на количество кеш-файлов. Все запросы сохраняются и хранятся вечно. Удалить можно напрямую через ФТП. Максимальное количество кеш-файлов: 2000шт. по умолчанию (есть возможность изменить), по достижению максимального кол-ва кеш-файлы удаляются.   
  4.  Возможность хранения данных в сжатом формате - gzip. Эта опция существенно может сэкономить место на диске занимаемое кешом. PS: Стоит помнить, что распаковывание файлов влияет так же на нагрузку процессора.
  5. Протоколирование работы системы кеширования. Возможен вывод debug'а.

 

                                   7734aaac990c.gif

Данный модуль желателен для интернет-магазинов:

  1. база данных которых содержит более 1000 товарных позиций
  2. посещаемость которых от 500 и выше
  3. у которых много товарных опций участвующих в фильтре товаров (как в стандартном фильтре, так и в ajax фильтрах)
  4. у которых установлены сторонние модули выполняющие тяжелые запросы к БД, содержащие в себе подзапросы к другим таблицами, модули инициирующие большое количество мелких запросов к БД. К таким модулям можно отнести практически каждый третий платный/бесплатный модуль.
  5. которые обслуживаются у капризных провайдеров с дешевыми тарифными планами.

Проведение  тестов показало:

  1. Время получения информациии ииз кеш-файлов происходит в 2-3 раза быстрее, чем получении информации из БД. (Для примера: Кол-во запросов: 11; время выполнения запросов: Queries execution time: 0.0259737968445 sec. Время получения запросов из кеш:Queries execution time: 0.00172019004822 sec. )Время получения информации из кеш-файлов одинаково (бывает чуть быстрее) не отличается от времени выполнения запросов.
  2. Время генерации страницы в некоторых случаях сокращается, а так на том же уровне.

PS: Никаких переделок в модулях и самом движке (кроме подключения модуля) не потребуется, вы так же обращаетесь к БД как и раньше. ($this->db->query(); $this->db->results(); и т.п.)

 

Cтоимость модуля: 20$ + бесплатная установка.

Устанавливаю сам, во избежание кривизны установки, а как следствие и работы самого модуля.

 

Демо на стандартной Simpla: http://demo.gorgaz.com.ua/

Для проделывания всяких изменений, милости прошу в админку: (Логин и пароль: demo) для сайта demo.gorgaz.com.ua


Изменено: cernos, 12.03.2015 - 14:49


#2 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 26.10.2014 - 20:06

Как раз интересно посмотреть демо на стандартном шаблоне.  А работает у Вас как-то странно:

 

1. Отсутствует блок просмотренных товаров - а на нем как раз интересно понаблюдать работу.

2. Пробую разные применения фильтра, в том числе руками в адресной строке пишу разное типа  max_price=33.8965, а в результате все время одно и то же DataBase queries: 0.  Сомнительно, что накешировали все запросы по всем дробным числам...

3. На странице товара, например,  http://demo.energodo...elmer_4814.html

выходит сообщение об ошибке MySQL.



#3 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 26.10.2014 - 20:16

 

 

Как раз интересно посмотреть демо на стандартном шаблоне.  А работает у Вас как-то странно:

 

1. Отсутствует блок просмотренных товаров - а на нем как раз интересно понаблюдать работу.

2. Пробую разные применения фильтра, в том числе руками в адресной строке пишу разное типа  max_price=33.8965, а в результате все время одно и то же DataBase queries: 0.  Сомнительно, что накешировали все запросы по всем дробным числам...

3. На странице товара, например,  http://demo.energodo...elmer_4814.html

выходит сообщение об ошибке MySQL.

 

Попробуйте менять адресную строку сразу в: отладчике. К примеру в хроме: 

view-source:http://demo.energodo...max_price=14743

Вот что я получил:

 DataBase queries: 4
 Cache read queries: 17
 Queries execution time: 0.0502939224243 seconds 

 

Если есть какие то сомнения, могу установить на стандартную симплу.

В данный момент веду доработку, потому могут возникать некоторые косяки ;)

 

Сегодня постараюсь сделать демо-версию на новой симпле + стандартный шаблон с выводом дебага.



#4 yr4ik

yr4ik
  • Фрилансер
  • 896 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 26.10.2014 - 20:41

1. Автоматическое кеширование всех запросов.

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

А как Вы отслеживаете изменения в таблицах? Через SHOW TABLE STATUS ?

 

3. Максимальное количество кеш-файлов: 2000шт., после чего производится их авто-очистка кеша.

Может лучше делать проверку на время жизни кэша при его запросе? Если он долго хранится - то удалять... То очищать все по достижению количества, как по мне не совсем правильно. Ведь если магазин с большим количеством товаров то можно предвидеть что эти очистки будут довольно часты. Что сильно снижает эффективность кэширования.  



#5 DaVinci

DaVinci
  • Фрилансер
  • 1 141 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.10.2014 - 21:08

 

 

 

Попробуйте менять адресную строку сразу в: отладчике. К примеру в хроме: 

view-source:http://demo.energodo...max_price=14743

Вот что я получил:

 DataBase queries: 4
 Cache read queries: 17
 Queries execution time: 0.0502939224243 seconds 

 

Если есть какие то сомнения, могу установить на стандартную симплу.

В данный момент веду доработку, потому могут возникать некоторые косяки ;)

 

Сегодня постараюсь сделать демо-версию на новой симпле + стандартный шаблон с выводом дебага.

 

А можно на это демо повесить фильтр который сейчас есть на сайте http://demo.energodom.com.ua  :)



#6 DaVinci

DaVinci
  • Фрилансер
  • 1 141 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.10.2014 - 21:26

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

 

Cernos, я правильно понял для обработки фильтра используется 18 запросов к базе?  :)

 

 

кэширование действительно интересно использовать  для настроек, всех брендов и категорий



#7 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 26.10.2014 - 22:44

Итак доступно демо на стандартной версии Simpla:

http://demo.gorgaz.com.ua/



#8 DaVinci

DaVinci
  • Фрилансер
  • 1 141 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.10.2014 - 22:45

Итак доступно демо на стандартной версии Simpla:

http://demo.gorgaz.com.ua/

 

сейчас Корс спросит - почему запросов 12 а не 16  :ph34r:



#9 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 837 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 26.10.2014 - 22:54

Итак доступно демо на стандартной версии Simpla:
http://demo.gorgaz.com.ua/

Переходя по ссылкам то появляются картинки товаров то опять пропадают.

#10 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 26.10.2014 - 23:00

Отвечаю на возникшие вопросы:

 

Как раз интересно посмотреть демо на стандартном шаблоне.

Смотрим Kors по уже доступной ссылке: http://demo.gorgaz.com.ua/ Так же предоставляю доступ к админке логин и пароль: demo

 

 

А как Вы отслеживаете изменения в таблицах? Через SHOW TABLE STATUS ?

 

Может лучше делать проверку на время жизни кэша при его запросе? Если он долго хранится - то удалять... То очищать все по достижению количества, как по мне не совсем правильно. Ведь если магазин с большим количеством товаров то можно предвидеть что эти очистки будут довольно часты. Что сильно снижает эффективность кэширования.  

1. Отслеживание происходит не через show table status. Каждый запрос проходит через обработчик, который следит за оператором запроса, скажем INSERT INTO s_products ...... из этого запроса ясно, что идет обновление таблицы s_products, вот собственно и удаляем весь кеш связанный с таблицей s_products. (ясно в деле это выглядит более сложно чем на словах)

2. Не стоит делать проверку на время жизни кеша по нескольким причинам: 

2.1 Кеш может устареть в отличии от оригинальных возвращаемых данных; Если действовать по типу мое решение + время, то будет путаница, лишние логические узлы.

2.2 Требуется много процессорного времени + нагрузка на HDD возникает при проверке всех файлов на дату создания.

2.3 Эффективность кеширования состоит не в том, чтобы вовсе убрать запросы к БД, а в том, чтобы значительно их снизить, количество живущих файлов можно увеличить по своему усмотрению, за это отвечает специальная переменная.

 

А можно на это демо повесить фильтр который сейчас есть на сайте http://demo.energodom.com.ua  :)

В принципе, тот фильтр который стоит, делает довольно таки много лишних запросов (говорю с намеком на покупку твоего :)). Нет сейчас времени устанавливать его на новое демо.

 

 

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

 

Cernos, я правильно понял для обработки фильтра используется 18 запросов к базе?  :)

 

кэширование действительно интересно использовать  для настроек, всех брендов и категорий

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

 

 

Переходя по ссылкам то появляются картинки товаров то опять пропадают.

Это связано уже с симплой =) Незнаю почему, но картинки на лету не отрабатываются, только после рефреш страниицы... Я даже помню, этот вопрос поднимался здесь на форуме и там было решение проблемы.

Кажется в этой теме описана проблема: http://forum.simplac...смотра/?hl=фото



#11 DaVinci

DaVinci
  • Фрилансер
  • 1 141 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 26.10.2014 - 23:21

В принципе, тот фильтр который стоит, делает довольно таки много лишних запросов (говорю с намеком на покупку твоего :)). Нет сейчас времени устанавливать его на новое демо.

 

вопрос не актуален, я уже понял что это не твой фильтр  :) Но для примера актуальности кэширования очень даже кстати



#12 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 26.10.2014 - 23:36

вопрос не актуален, я уже понял что это не твой фильтр  :) Но для примера актуальности кэширования очень даже кстати

 

Кеширование так же хорошо при большой базе товаров и сложных выборках из БД - сюда же можно привести в пример поиск по сайту ajax-вый, сортировку, фильтр (как стандартный, так и от сторонних разработчиков) который содержит в себе много подзапросов.



#13 yr4ik

yr4ik
  • Фрилансер
  • 896 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 27.10.2014 - 01:31

2.1 Кеш может устареть в отличии от оригинальных возвращаемых данных; Если действовать по типу мое решение + время, то будет путаница, лишние логические узлы.

2.2 Требуется много процессорного времени + нагрузка на HDD возникает при проверке всех файлов на дату создания.

2.3 Эффективность кеширования состоит не в том, чтобы вовсе убрать запросы к БД, а в том, чтобы значительно их снизить, количество живущих файлов можно увеличить по своему усмотрению, за это отвечает специальная переменная.2.2 Требуется много процессорного времени + нагрузка на HDD возникает при проверке всех файлов на дату создания.

 
Я не говорил что бы проверять все файлы на время их создания. Я говорил о проверке файла при обращении к нему. 
К примеру можно при подключении к БД, через SHOW TABLE STATUS, получить время изменения таблиц. А дальше, уже при обращении к кэшу, сверять время его создания с временем последнего изменения таблицы. В результате добавится один простой запрос но он в свою очередь может значительно улучшить процесс. А ограничивать их количество, по моему мнению, не правильно.

1) постоянные проверки количества файлов (как я понимаю при каждом запросе или возможно при старте)
2) Я уже говорил. Если, допустим, в магазине 10тыс товаров и на сайте 50 человек. то кэш по сути даже сработать не успеет. Поскольку постоянно будет очищаться... Нагрузка на БД не уменьшится, а на HDD только возрастет...



#14 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 27.10.2014 - 01:50

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

 

Спасибо за заинтересованность в модуле и пожелания, я их учту.



#15 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 27.10.2014 - 08:28

Итак доступно демо на стандартной версии Simpla:

http://demo.gorgaz.com.ua/

Спасибо, очень даже интересно.

 

Только положить в корзину не получается. Анимация идет, а в корзине пусто...

 

И на демо, может, откроете показ инфы по запросам на самой странице, чтоб каждый раз код не открывать?



#16 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 27.10.2014 - 10:49

..............................



#17 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 27.10.2014 - 16:17

Корзина исправлена и работоспособна на http://demo.gorgaz.com.ua/.

Ведется работа над модулем на demo.energodom.com.ua - возможны перебои в работе.



#18 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 27.10.2014 - 16:51

А сейчас в демо всегда  ненулевое число запросов. Даже когда страницу  (например http://demo.gorgaz.c...570-galaxy-mini) обновляю несколько раз, 1 запрос все равно есть. А должно бы быть 0...



#19 SV911

SV911
  • Пользователь
  • 299 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 27.10.2014 - 17:32

Так что с модулем? Работает или нет? У меня есть острое ощущение что он мне нужен. )



#20 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 27.10.2014 - 19:45

Так что с модулем? Работает или нет? У меня есть острое ощущение что он мне нужен. )

Модуль работает, сейчас пишу новую версию, оптимизирую код + произвожу небольшие доработки.

Как только будет готов окончательно, отпишусь!

 

 

А сейчас в демо всегда  ненулевое число запросов. Даже когда страницу  (например http://demo.gorgaz.c...570-galaxy-mini) обновляю несколько раз, 1 запрос все равно есть. А должно бы быть 0...

Спасибо, был замечен маленький БАГ из-за которого запросы с 0-м результатом не кешировались.






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых