Если совсем вкратце. Имеется небольшая собственная CRM система (учёт товаров и т.п.) на базе этой системы был написан модуль (некое подобие для CMS), что бы контент менеджер прям из CRM управлял сайтом. Всё написано на php.
Структура БД (в mySQL) построена таким образом, что имеются страница для сайта. И у этой страниц есть группы свойств (описываю прям совсем приблизительно для примера, что бы не вдаваться в подробную структуру):
- Таблица со иерархической структурой самих страниц - pages
- Таблица с группами свойств - props_group (которая имеет связь с pages)
- Таблица со значениями свойств - props_value (которая имеет связь с props_group)
На выходе на сайте. Что бы обратиться к данным одной страницы - получается идет 3 запроса к БД. И система отдает все данные по одной страницы (перебирая все её группы и потом перебирая свойства этой группы). На страницы со списком товаров (к примеру выводится 24 товара), получается что каждая карточка делает свои 3 запроса к БД итого 72 запроса (3 запроса на 24 товара). И это только про страницу товаров. По другого контента на какой либо страницы, что есть на сайте (меню, баннеры, предложения, выборка какая то в футере и т.п.). Это всё условно я пишу как пример.
Что бы сократить кол-ва запросов к БД. Я решил переделать след образом. В саму таблицу
pages, при её редактировании сохраняются все данные по её значениям группы и свойств (т.е. весь массив данных из таблиц props_group т props_value в виде JSON строки). Но размер данных большой и приходится использовать тип поля
MEDIUMTEXT. Я в итоге получил один запрос для каждого товара, но таблица сразу увеличилась в размере и запрос выполняется соответственно дольше.
Вопрос: Как всё же правильно оптимизировать количество запросов к mySQL (или как правильно организовать хранение данных)?
Или на сколько верный вообще такой подход по хранению данных в видео json строки если данные эти статичны и меняются только при редактировании самой страницы? Есть ли смысл смотреть в сторону redis что бы хранить там этот json результат со всеми свойствами страницы?