Jump to content
Sign in to follow this  
stalker780

[Поддержка] Файловое/Memcached кэширование mysqli

Recommended Posts

Файловое/Memcached кэширование mysqli


Файловое/Memcached кэширование mysqli



 

Share this post


Link to post
Share on other sites

Ваш модуль дает что-то большее чем может дать кеширование запросов силами самой mysql?

Share this post


Link to post
Share on other sites

Ну он как минимум умеет кешировать запросы с NOW() коих в стандартом OC/ocStore валом. Причем, жизненно важных (SELECT * FROM product WHERE date_available <= NOW())...

Плюс неоднократно сталкивался с дешевыми хостингами, у которых попросту кеш mysql отключен или установлен в 1Мб.

Изначально, модуль писался для товарища, у которого дешманский хостинг ограничивает количество sql запросов в минуту, а после апгрейда сайта с OC 1.0 на OC 1.5 количество запросов выросло в десятки раз. Результатом внедрения модуля, стало практически 0 кол-во запросов + возросшая скорость отдачи страниц.

Сейчас на подходе версия, умеющая автоматом подхватывать memcache(d) (при его наличии, конечно же) на локалхосте и использующая его в качестве хранилища кеша.

Кстати, даже с включенным кешем mysql, при использовании memcached я вижу 20-40% прирост в скорости открытия страниц. Так, что кеш mysql тоже не так быстр, как хотелось бы. Похоже много времени занимает само подключение к серверу mysql.

PS
Вряд ли для человека, хорошо знающего OpenCart и умеющего правильно настроить VPS, этот модуль станет полезным. Можно прописать кеш в моделях + поставить выложенный здесь же на форуме модуль кеширования memcached. Я просто объединил этот функционал и кеширую ВСЕ Select'ы, кроме вписанных в исключения.
Более того, на одном из хостингов были даже замечены значительные тормоза после установки этого модуля. Подозрения на мертвую файловую систему на серваке.

Share this post


Link to post
Share on other sites
Плюс неоднократно сталкивался с дешевыми хостингами, у которых попросту кеш mysql отключен или установлен в 1Мб.

 

 

с дешевыми, это вы верно заметили, в этом плане просто беда.

Share this post


Link to post
Share on other sites

Как минимум мой умеет чистить кеш при INSERT/UPDATE/DELETE, тоесть обновление данных происходит прозрачно для юзера, как только он вносит изменения в админке

+ массив с исключениями, при нахождении которых кеш не чистится

+ mysqli

+ встроенный монитор медленных запросов

 

+ как я уже писал выше, на подходе версия с авто-memcached

+ в новой версии будет массив исключений с некешируемыми запросами

Share this post


Link to post
Share on other sites

при любом INSERT/UPDATE/DELETE ? нет проверки на таблицу?

ну мемкеш недолго прикрутить, остальное ерунда.

т.е. по сути ничего нового?

Share this post


Link to post
Share on other sites

при любом INSERT/UPDATE/DELETE ? нет проверки на таблицу?

ну мемкеш недолго прикрутить, остальное ерунда.

т.е. по сути ничего нового?

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

А что можно придумать нового в связке php+mysql? :)

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

 

Повторюсь:

Вряд ли для человека, хорошо знающего OpenCart и умеющего правильно настроить VPS, этот модуль станет полезным. Можно прописать кеш в моделях + поставить выложенный здесь же на форуме модуль кеширования memcached. Я просто объединил этот функционал

 

По отдельности все это есть на этом форуме и других профильных бесплатно. Цель была все объединить.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Кеш на диске устроен по принципу стандартного класса $this->cache с небольшой доработкой в виде отключения сортировки у glob - работает быстрее, но при увеличении кол-ва файлов glob в любом случае начинает тормозить. На своем хостинге тестировал, тормоза начинаются где-то после 5000 файлов в кеше.

Поэтому и введен массив с исключениями из кеширования. Он позволяет более гибко настроить кеш и исключить незначительные мелкие запросы.

Share this post


Link to post
Share on other sites

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

 

Болагодаря парсингу, теперь не происходит полный сброс файлового кеша при апдейтах. Модуль знает какая таблица обновилась и чистит только ее кеш.

 

Модуль теперь умеет кешировать не все, а только медленные запросы. Скорость медленных запросов настраивается в параметрах.

 

Новая версия проходит усиленное тестирование.

Вижу, что нужно делать менеджер кеша, чтобы из админки можно было управлять кешем вручную.

Share this post


Link to post
Share on other sites

Купила, очень довольна. Сайт стал летать. Спасибо))

Share this post


Link to post
Share on other sites

Купила, очень довольна. Сайт стал летать. Спасибо))

Спасибо за спасибо ;)

 

Держите меня в курсе, как будет себя вести сайт.

 

Обновил файл:

  • + Добавлена замена NOW() на текущую дату в SELECT запросах, это позволяет серверу Mysql самостоятельно кэшировать запросы (при правильной настройке сервера)
  • + 2 новых параметра настройки:
  • $this->replace_date = true;
  • $this->replace_date_format = "Y-m-d";

Share this post


Link to post
Share on other sites

Скачала обновлённый файл, к сожалению у меня ошибка: 

Warning: MemcachePool::set() [memcachepool.set]: The lowest two bytes of the flags array is reserved for pecl/memcache internal use in /...../system/database/mysqli_cached.php on line 448

Share this post


Link to post
Share on other sites

Скачала обновлённый файл, к сожалению у меня ошибка: 

Warning: MemcachePool::set() [memcachepool.set]: The lowest two bytes of the flags array is reserved for pecl/memcache internal use in /...../system/database/mysqli_cached.php on line 448

Честно говоря эта ошибка должна была у вас вылезти и на более ранних версиях :)

Была проблема в работе с memcache. Я его практически не проверял, т.к. на всех серверах пользуюсь memcached, а у них как оказалось разный синтаксис комманды set.

 

Ошибку поправил. Скачайте последнюю версию.

Share this post


Link to post
Share on other sites

В ранней версии всё в порядке, ошибки нет.

Скачала последнюю версию, слетел мой дизайн и стал дефолтовый, не находит категории сайта: Category not found! Почему то стал английский язык.

И ошибки:

 

Notice: Trying to get property of non-object in /..../index.php on line 57
Notice: Trying to get property of non-object in /..../index.php on line 66
Warning: Invalid argument supplied for foreach() in /..../index.php on line 66
Notice: Trying to get property of non-object in /..../index.php on line 74

 

index.php:

if ($store_query->num_rows) {	$config->set('config_store_id', $store_query->row['store_id']);} else {	$config->set('config_store_id', 0);}		// Settings$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");foreach ($query->rows as $setting) {	if (!$setting['serialized']) {		$config->set($setting['key'], $setting['value']);	} else {		$config->set($setting['key'], unserialize($setting['value']));	}}if (!$store_query->num_rows) {	$config->set('config_url', HTTP_SERVER);	$config->set('config_ssl', HTTPS_SERVER);	}

Share this post


Link to post
Share on other sites

Странно... Какая у вас версия OC?

Кэш чистили?

 

А у Вас в модуле mysqli используется? Проблема явно в MySQLi. Решаема.

Share this post


Link to post
Share on other sites

Будет ли работать на чистом Opencart 1.5.1.3 ?

Для php-5.2.17-37 что лучше mysql или mqsqli ?

Есть ли смысл в данном модуле если уже использую для кеширования это https://opencartforum.com/files/file/1751-turbocache-%D0%B4%D0%BB%D1%8F-ocstore/

это https://opencartforum.com/files/file/1337-mcj-%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5-%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D0%B5-css-js/

и это https://opencartforum.com/files/file/59-memcache-support/

На сколько возрастет время генерации страницы?

Share this post


Link to post
Share on other sites

Будет ли работать на чистом Opencart 1.5.1.3 ?

Будет. И на 1.4 и на 2.0.

 

Для php-5.2.17-37 что лучше mysql или mqsqli ?

Начиная с PHP 4.1.3 есть поддержка mysqli. Начиная с PHP 5.5 поддержка mysql прекращена. Разницы в скорости работы между mysql и mysqli нет.

http://phpclub.ru/talk/threads/mysqli-vs-mysql.57643/

 

Есть ли смысл в данном модуле если уже использую для кеширования это https://opencartforum.com/files/file/1751-turbocache-для-ocstore/

TurboCache, судя по описанию похож на работу моего модуля... но как я понял из описания он работает не автоматически а требует определенных манипуляций для нестандартных модулей.

Мой же модуль автоматически определяет тяжелые запросы и автоматом кеширует/оптимизирует их.

 

Мой модуль на работу с JS/CSS не влияет.

 

Поддержка memcache/memcached встроена и для localhost определяется автоматически.

 

На сколько возрастет время генерации страницы?

Этого я думаю вам никто не скажет :) Все зависит от конфигурации вашего хостинга и структуры SQL-запросов. Слишком много неизвестных.

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

Share this post


Link to post
Share on other sites

У меня на сайте около 250 категорий, из за них страницы очень долго загружаются, Ваш модуль может справиться с этой проблемой. Если так, тогда сразу и куплю! Какие данные нужно для того, чтобы Вы могли точно сказать?

Share this post


Link to post
Share on other sites

У меня на сайте около 250 категорий, из за них страницы очень долго загружаются, Ваш модуль может справиться с этой проблемой. Если так, тогда сразу и куплю! Какие данные нужно для того, чтобы Вы могли точно сказать?

90%, что поможет. Особенно если у вас есть подсчет кол-ва товаров в категории.

Попробуйте поставьте модуль https://opencartforum.com/files/file/1629-opencart-profiler-vqmod/

С его помощью Вы сможете увидеть, есть ли у Вас медленные sql-запросы

Share this post


Link to post
Share on other sites

Связано ли с этим, но после установки драйвера, который безумно помог сайту и он теперь действительно летает при попытке бэкапа выдается следующее: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 85 bytes) in /home/kolgotki/***/www/system/database/mysqli_cached.php on line 366

Хелп! :)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By p0v1n0m
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
    • By p0v1n0m
      Скачать/Купить дополнение


      Чистильщик кэша и логов
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
      Добавил p0v1n0m Добавлено 15.08.2016 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1 Обращение к серверу разработчика  
    • By markimax
      990.00 руб
      Скачать/Купить дополнение


      Jet Cache - кеширование, оптимизация для магазинов

       

      Логин / пароль:
      demo / demo
       
      Документация  
      Более 10`000 интернет магазинов выбрали SEO CMS для работы
      SEO CMS JET CACHE :: Jet Cache - быстрая система кеширования страниц, контроллеров и методов моделей opencart

      Версия под opencart 3.x высылается по запросу
      Возможности
       
      - кеширует полностью страницы при полной интеграции с opencart (позволяет кешировать и для зарегистрированных пользователей и изменений корзины а также в зависимости от изменений в модулях)  
      - кеширует выбранные контроллеры (т е фактически  любые модули, будь то меню или т.п. а также полностью кеширует позиции (уникальная технология которая не реализовано ни в одном модуле кеширования для opencart) (с))  
      - кеширует методы моделей opencart (подсчет количества товаров и т п )  
      - простая установка и обновление  
      - гибкие настройки  
      - поддержка мультиязычности  
      - поддержка мультимагазинов  
      - поддержка протоколов https и http  
      - гибкая взаимосвязь с любым функционалом платформы SEO CMS  
      - совместимость с любой темой, любыми модулями, которые соответствуют стандартам программирования  
      - поддержка кеширования sitemap Чем модуль лучше других
       
      - уникальные технологии кеширования не имеющие аналогов в opencart (уникальная технология полной интеграции с opencart, в отличии от всех кешировщиков которые сделанны по технологии v2pc)  
      - модуль работает с любыми темами и модулями Требования
       
      Opencart 2.x или любая сборка на нем (ocStore, Opencart.PRO, или другие) PHP 5.3 или выше Модуль НЕ заменяет файлы системы Модуль НЕ использует ioncube  
      Совместимость модуля
       
      Opencart 2.x или любая сборка на нем (ocStore, Opencart.PRO, или другие) Любая тема или любые модули (которые сделаны без ошибок, согласно стандартов программирования или верстки) для оpencart 2.x  
      Установка, настройка
       
      Если пользователь хочет чтобы сотрудник службы технической поддержки проделал работу по установке и настройке модуля вместо пользователя на сервере пользователя, это уже услуга + 590 рублей  
      Лицензия Все права на модуль принадлежат разработчикам opencartadmin.com Условия использования лицензии: один домен - одна лицензия (покупка продукта для каждого домена). Условия использования лицензии - "на владельца". Далее... Добавил markimax Добавлено 15.03.2017 Категория Кэширование, сжатие, ускорение Системные требования PHP 5.3+ Сайт разработчика https://opencartadmin.com/seo-cms-jet-cache.html Старая цена 590 Метод активации Через официальный сайт дополнения Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х  
    • By Yoda
      Буквально несколько недель назад Hetzner, пытаясь остаться в тренде, запустил cloud сервис аналогичный Amazon W3 или Digital Ocean.
      Выглядит очень круто - от 3 евро за юнит(2 гига RAM 20 гиг диска), NVME-диски, и даже есть возможность купить не виртуально ядро в виде какого-то потока HyperThread,  а полноценный кусок процессора, правда от 23 евро за 2 виртуальных ядра - но это тоже круто.
       
      И очень меня эти три евры за выделенный юнит заманили, взял я под новый проект себе на пробу, и был приятно удивлен, что оно работает быстрее подавляющего числа доступных VPS, да и деплой реально в три секунды.
       
      Почему же это зло?
      После некоторых тестов, выяснилось что на самом деле, не все так хорошо как на фасаде. Я взял сервер, для блога на Wordpress, поставил php 7.2, и он просто полетел.

      Но когда мы взяли 4 ядра 160 гигабайт юнит, при переносе и холодном старте все оказалось быстро (главная страница магазина на 160 000 товаров грузилась за 150мс), но вот через полчаса после переноса DNS и появления  нагрузки, вдруг 150мс превратиилсь в 600, при том что нагрузка на процессоре была не больше 20-25% и памяти свободной вагон.
       
      После аудита, обнаружилась очень простая и достаточно логичная проблема. 
      В силу использования модуля кеширования  (не буду уточнять какого), в кеш набилось  за 20 минут порядка 5000 файлов. В целом, если у вас просто кусок сервера, или обычный VPS  - это немного и не повлечет таких проблем просадки в скорости. Но у нас же клауд. Соответственно данные на диске динамически реплицируются и синхронизируются на несколько узлов (и это ни фига не быстрый RAID). Вобщем оказалось что такой побочный эффект облачной виртуализации казалось бы напрочь убил возможность использования площадки под большой проект. Но выжигание кривого кеширования, правильная общая оптимизация системы и установка Redis спасла отцов русской демократиии от фиаско.
       
      Так что друзья, клауд - это хорошо но не очень, и не каждый модуль кеширования такой полезный как пишут в ваших этих интернетах, и если вы хотите оптимизировать большой магазин, возможно стоит изначально смотреть в сторону аренды выделенного сервера с производительной файловой системой, и использовать техники оптизимиации, отличные от кеширования.
       
       
    • By Tinyled
      Добрый день, столкнулся с задачей, выборки данных из таблицы в бд
      сама задача состоит в том что бы получить из таблицы записи сгруппированные по телефону (phone), но перед этим отсортированные по дате (datetime DESC), при этом с лимитом в 200 записей (LIMIT 0,200)
      прошу помочь понять, как можно сформировать запрос к бд, дабы не нагружать сильно бд, и выполнить все условия.
      Или может быть я ошибаюсь, и конечную сортировку лучше делать на php?
      пробовал запросом 
      SELECT sends.* FROM (SELECT * FROM `oc_watsappchat_send` WHERE creator="" ORDER BY `id` DESC) as sends GROUP BY sends.phone ORDER BY `id` DESC LIMIT 0,200 но запрос выходит достаточно долгим, и как я понимаю при увеличении числа записей в таблице время будет также увеличиваться
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.