Реализую фильтрацию данных на WordPress, фильтрация может быть по множеству кастомных таксономий и значению произвольных полей которые могут быть у каждой записи. Соответственно можно выбрать любую их комбинацию.
Запрос этого дела через WP_Query все делает как положено, но скорость сильно не устраивает при наличии 50К+ записей.
Сейчас использую отдельную таблицу для фильтра где храню для каждой записи все ее параметры используемые для фильтрации, в данном случае фильтрация идет по ее значениям и при формировании страницы тащу уже из стандартных таблиц все данные записи.
В этом случае, все шикарно и быстро работает. Но есть минус, Первоначальное формирование этой таблицы занимает изрядное количество времени, из за всяких не быстрых вордпрессовских хуков и экшенов, но это еще пол беды, основная проблема это так же долгое обновление ее при пакетном изменении записей, из за тех же экшенов и фильтров.
Есть ли некое альтернативное решение хранения данных, для быстрой фильтрации?
Sphinx в данном случае не подойдет, решение должно работать на обычном дорогом шареде.
сделайте индексы в бд на необходимые поля.Вес базы конечно подрастет, но выборка будет идти быстрее. Хотя на мой взгляд пытаться добиться от wp скорости - это как мастерить ebs в ВАЗ 2101. Интересно, но не стоит ни кому рассказывать.
Как вариант еще можно кешировать запросы, если их вариаций не миллион, то вполне решение.
в БД WordPress все нужные индексы уже есть, а запросы в целом вполне себе норм. По таксономиям все работает шустро, по мета-данным - вот там как раз индексы не особо предусмотрены и их добавление сильно ситуацию не спасет. Другое дело, что даже на шареде при 50к записей тормозить не должно еще, надо все остальное смотреть. И оbject cache таки да, заметно ускорит. Впрочем, не факт что он есть даже на дорогом шареде, или что выделенной памяти хватит, а то будет постоянная гонка за место в стеке, а не нормальный LRU. Вообще, конечно, делать такие сложные фильтры и с такой БД держаться за шаред - имхо какое-то странное решение. Тут по большому счету любая платформа может подтормаживать. Берется нормальный VPS, ставится специализированный Elastic Search и все, вопрос решен.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.