Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

кэширование базы opencart


amfsota

Recommended Posts

Я опять тут за помощью.

Насколько я знаю у opencart pro есть кэширование запросов в базу.

Похоже я напоролся с этим кэшированием на геморрой.

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

$calcjson=json_encode($data['calcparams']);
$this->db->query("UPDATE " . DB_PREFIX . "product SET calculator='" . $this->db->escape($data['selected-calculator']) . "' WHERE product_id = '" . (int)$product_id . "'");// это поле пишется и читается номрально
$this->db->query("UPDATE " . DB_PREFIX . "product SET parametres='" . $this->db->escape($calcjson) . " WHERE product_id = '" . (int)$product_id . "'");// это поле сейчас не пишется и не читается, вчера и сегодня утром читалось без проблем

Кто-нибудь сталкивался с такой проблемой?

Надіслати
Поділитися на інших сайтах


Да нет, это я правил строку, и пропустил кавычку, думал кодировка в json барахлит, и тупо в запросе пробовал так:

$this->db->query("UPDATE " . DB_PREFIX . "product SET parametres='ggggggg' WHERE product_id = '" . (int)$product_id . "'");

Один пень не пишет. Я в отчаянии. что делать - не знаю.

Кроме этого даже чтение из базы по нулям из этого поля как будто его нет, а он ЕСТЬ.

Надіслати
Поділитися на інших сайтах


17 минут назад, amfsota сказал:

Один пень не пишет. Я в отчаянии. что делать - не знаю.

Обновляются поля из фронта ?
Если включен Turbo - то понятное дело обновляться они не будут, так как код их выполняться не будет

Отключать Turbo

 

Надіслати
Поділитися на інших сайтах

Это точно что в другом, но не форуме, а формате

 

Есть кеш?

   НЕТ

      код контроллера

      update

     готовим кеш

      отдать кеш

  Да

  отдать кеш

Надіслати
Поділитися на інших сайтах

21 минуту назад, amfsota сказал:

Похоже мы с Вами в другом форуме общаемся))

У вас сборка opencart.pro стоит ?

Надіслати
Поділитися на інших сайтах

11 минут назад, chukcha сказал:

Это точно что в другом, но не форуме, а формате

 

  Да

  отдать кеш

При полностраничном кешировании кешировщиком код контроллеров фронта исполняться не будет
Соответственно не будет исполняться и код ТС (если он во фронте)
Надо кешер умеющий по контроллерно кешировать ;)
Или выключать полностраничный кешировщик

Надіслати
Поділитися на інших сайтах

32 минуты назад, markimax сказал:

У вас сборка opencart.pro стоит ?

Да Pro Версия 2.1.0.1.10

кеш менеджер включен

в процессе тестов постоянно обновлял и системный кеш и картинки - без толку.

Сейчас все запросы работают и из админки и из каталога.

А когда глюки начинаются, только phpmyadmin может вносить изменения в базу.

Надіслати
Поділитися на інших сайтах


47 минут назад, chukcha сказал:

Это точно что в другом, но не форуме, а формате

 

Есть кеш?

   НЕТ

      код контроллера

      update

     готовим кеш

      отдать кеш

  Да

  отдать кеш

Это каждый запрос к базе так обслуживать?

Надіслати
Поділитися на інших сайтах


1 час назад, chukcha сказал:

Это точно что в другом, но не форуме, а формате

 

Есть кеш?

   НЕТ

      код контроллера

      update

     готовим кеш

      отдать кеш

  Да

  отдать кеш

Формулировка некорректна, если речь идет о кэшировании запросов к базе данных. Нужно проверку вести в файлах model.

Надіслати
Поділитися на інших сайтах


4 минуты назад, EVMedvedev сказал:

Формулировка некорректна,

Поясните некорректность полностраничного кеша?

Надіслати
Поділитися на інших сайтах

1 час назад, EVMedvedev сказал:

если речь идет о кэшировании запросов к базе данных.

именно к базе

со страницами всё в порядке

проблема с запросами, то работают, то - нет

причём выборочно, одни поля пишет и читает, другие - нет

Змінено користувачем amfsota
Надіслати
Поділитися на інших сайтах


2 часа назад, chukcha сказал:

Поясните некорректность полностраничного кеша?

Вместо кода контроллера нужен код модели, то есть то место, где формируется запрос к базе данных. Ключом данных в кэше является хэш SQL-запроса. Полностраничный кэш - это когда в кэше хранится весь HTML-код страницы. Тогда соответственно перехват страницы нужно делать на уровне роутинга. Например в Action, но получается опять же не в контроллере.

Надіслати
Поділитися на інших сайтах


Покажите некорректность

 

на каком этапе проверяется наличие кеша?

4 минуты назад, EVMedvedev сказал:

Вместо кода контроллера нужен код модели

 

Надіслати
Поділитися на інших сайтах

1 час назад, amfsota сказал:

именно к базе

со страницами всё в порядке

проблема с запросами, то работают, то - нет

причём выборочно, одни поля пишет и читает, другие - нет

Если поля выборочно пишутся или теряются, то соответственно либо проблемы сериализации и десериализации (данные из БД нужно преобразовывать в строку для записи в кэш и обратно в массив) либо потери данных в самом кэше.

Надіслати
Поділитися на інших сайтах


12 часов назад, chukcha сказал:

Покажите некорректность

 

на каком этапе проверяется наличие кеша?

 

Так написано же. Для полностраничного кэширования в Action (если точнее, то в Action::execute), чтобы даже URL не разбирать, если для него есть кэш. Для модели - в момент после сбора полного SQL-запроса и перед его исполнением. В первом случае делаем ключ для кэша из урла, во втором - из SQL-запроса. Обычная практика во всех движках.

Кстати отсутствие в Opencart ORM движка для работы с базой данных, как например в Symfony, осложняет кэширование данных. В Symfony, а значит на всех системах на его основе, кэширование данных встроено в Doctrine централизовано.

Змінено користувачем EVMedvedev
Надіслати
Поділитися на інших сайтах


16 часов назад, amfsota сказал:

Да нет, это я правил строку, и пропустил кавычку, думал кодировка в json барахлит, и тупо в запросе пробовал так:


$this->db->query("UPDATE " . DB_PREFIX . "product SET parametres='ggggggg' WHERE product_id = '" . (int)$product_id . "'");

Один пень не пишет. Я в отчаянии. что делать - не знаю.

Кроме этого даже чтение из базы по нулям из этого поля как будто его нет, а он ЕСТЬ.

А вы уверены, что product_id у вас приходит нормальный ?

сделайте после этой конструкции $this->log->write("update .... ) и посмотрите что у вас пишет на самом деле.
Я подозреваю проблема в том, что вы просто кривой айдишник передаете и он или нулевой или его нету.

А про кеширование запросов в базу - чушь!

Надіслати
Поділитися на інших сайтах

1 час назад, EVMedvedev сказал:

Так написано же. Для полностраничного кэширования в Action (если точнее, то в Action::execute), чтобы даже URL не разбирать, если для него есть кэш. Для модели - в момент после сбора полного SQL-запроса и перед его исполнением. В первом случае делаем ключ для кэша из урла, во втором - из SQL-запроса. Обычная практика во всех движках.

Кстати отсутствие в Opencart ORM движка для работы с базой данных, как например в Symfony, осложняет кэширование данных. В Symfony, а значит на всех системах на его основе, кэширование данных встроено в Doctrine централизовано.

Обшибся, каюсь. Не Action::execute, а скорее Front::dispatch. В других движках алгоритмы другие. Сначала работает routing, то есть разбор урлов, а уже потом запускается контроллер. Там уже поздно кэшировать.

В этом смысле вы видимо имели ввиду "контроллер" это переменная $controller в index.php в которой и сидит объект класса Front. Тогда все верно.

Надіслати
Поділитися на інших сайтах


3 часа назад, snastik сказал:

А вы уверены, что product_id у вас приходит нормальный ?

сделайте после этой конструкции $this->log->write("update .... ) и посмотрите что у вас пишет на самом деле.
Я подозреваю проблема в том, что вы просто кривой айдишник передаете и он или нулевой или его нету.

А про кеширование запросов в базу - чушь!

Так вот и я думаю, что чушь.

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

Первый запрос пишет в базу данные, второй-нет, как будто стоит запрет на запись или чтение из поля 'parametres'.

Может ли mysql ограничивать доступ к определённым полям таблицы?

Наверное версию с кешированием запросов от Opencart надо отбросить...

Надіслати
Поділитися на інших сайтах


26 минут назад, amfsota сказал:

Так вот и я думаю, что чушь.

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

Первый запрос пишет в базу данные, второй-нет, как будто стоит запрет на запись или чтение из поля 'parametres'.

Может ли mysql ограничивать доступ к определённым полям таблицы?

Наверное версию с кешированием запросов от Opencart надо отбросить...

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.