dima9595
@dima9595
Junior PHP

Возможно ли как-то оптимизировать json_decode?

Добрый день!
Имеются данные, приходящие из БД в формате:
- id
- payload (json)
После получения данных и некоторых условий у меня начинается цикл foreach, где каждый элемент payload обрабатывается через json_decode. Проблема в том, что json_decode выполняется около 90% всего времени запроса, что является очень узким горлышком алгоритма. Т.е. выполнение всего алгоритма (запроса) выполняется, к примеру, 20 секунд, а обработка json_decode выполняется за 18 секунд. Что не есть хорошо.

Вопрос собственно в следующем: можно ли как-то этот json_decode ускорить?

PS: Использование кеша (redis и т.п.) не возможно из-за ограниченных ресурсов сервера и большого количества данных (при этом постоянно меняющихся).

UPD:
Для понимания алгоритма быстренько опишу его:
С множества документов (ERP система) в одну таблицу собираются определённые данные с вложенностями и записывается это всё в json, что бы дальше было удобно работать с ним. В отчёте (где всё это должно отобразиться) - получаем все эти данные и отображаем с определёнными условиями (фильтрами).
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Нет, "оптимизировать json_decode" нельзя.

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

Распарсить, положить в базу, при изменении данных менять их в базе, искать по-человечески, через SQL.
А редис тут вообще никаким боком не упёрся.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Переделать схему базы.

Можно попробовать использовать либу для потокового парсинга json halaxa/json-machine. Она вам поможет убедиться что проблема не в парсинге, а в структуре базы
Ответ написан
Комментировать
ChairfaceChippendale
@ChairfaceChippendale
No prison can hold Chairface Chippendale!
Как-то же pg-движок умеет индексировать json. Может этого хватит и рано падать в обморок?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы