Медленная работа Tickets
Здравствуйте.
На сайте используется Tickets.
Сайт, что-то типа блога. Имеется одна категория в которую пишутся все тикеты.
Количество тикетов уже 311000.
Основной запрос на выборку 10 тикетов в категории (разделе) очень медленно выполняется. Более 60 секунд.
Кто-нибудь использовал Tickets в таких же условиях? Такая же скорость?
На сайте используется Tickets.
Сайт, что-то типа блога. Имеется одна категория в которую пишутся все тикеты.
Количество тикетов уже 311000.
Основной запрос на выборку 10 тикетов в категории (разделе) очень медленно выполняется. Более 60 секунд.
Кто-нибудь использовал Tickets в таких же условиях? Такая же скорость?
Комментарии: 19
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Это скорее всего связано с тем, что там криво написана выборка по parents c depth — по карте ресурсов всегда получаются id потомков и включаются в запрос. А карта у тебя ооочень большая.
В MS2 уже поправил, попробуй изменить getTickets так:
Ну а после этого вызывай getTickets с параметром &depth=0. Должно помочь.
Надеюсь на завтра.
Начал копать дальше. Выполнил запрос из mysql-редактора.
Всплыло вот что. Проблема в самом mysql — долго выполняется сброс данных и их сортировка.
EXPLAIN запроса
Профайлер запроса
Есть у кого-нибудь какие либо мысли?
Убрать там все ненужные плюшки, лишние джоины и, возможно, разбить на несколько запросов, например отдельно считать кол-во комментов у тикета, или не считать вовсе.
Честно говоря, я вообще удивлен и очень рад, что 300 тысяч тикетов в принципе работают.
2) modx_tickets_votes индекс к class
3) modx_tickets_comments индекс к published, createdby
4) modx_site_content индекс к deleted
Без внедрения в код больше ничего не сделать. В идеале конечно разбить запрос на части. Я думаю у василия это уже в планах, т.к. разговор у нас с ним на эту тему был;-)
А вообще, после простановки этих индексов должен чутка быстрее работать не только листинг тикетов. Кстати, если не сложно покажите SHOW PROFILE и EXPLAIN запроса после простановки индексов.
Базовый сниппет я пока не планирую менять, ибо тут всё-таки крайне необычная ситуация. И я так понимаю, на 100 000 не особо тормозило =)
Если на сайте такая гора документов, значит с посещалкой все окей, и можно написать свой собственный сниппет для выборки из БД.
Планируем на тикетах сделать сервис отзывов.
По скромным оценкам будет 1,5 миллионов отзывов.
Вопрос:
1. Потянет ли Tickets такие объёмы?
2. Есть возможность проводить поиск по самим комментариям в тикете?
Спасибо
1. Что значит потянет Tickets? Тут скорее вопрос, потянет ли MODx. Создаете чистый сайт, пишите скрипт который сгенерит вам 1.5 млн тикетов (отзывов). Смотрите и тестируете результат, скорость, поиск и т.д. За последний месяц, тут уже обсуждали, потянет ли MODx большой объем данных… Поищите.
2. mSearch2 индексирует комментарии Тикетс из коробки. С этим проблем нет.
Вcе работает более менее нормально на VPS.
Но имеется проблема в работе административной части, а именно в выводе вкладки с комментариями: joxi.ru/KAgBwwMcEW3qo2
Не очень понятно толи аяксом пытаеся всё подтянуть то ли еще как-то, т.е. очень длинны ответ идет.
А нужно всего лишь получить количество записей и вывести первую страницу пагинации, а далее выводить постранично все отсальное. Понятно что сортировка влияет на скорость, но все равно всё очень долго работает и прогружает раз с 5 после обновления и запроса страницы- это только 1 страницу пагинации.
Может есть смысл написать Василию чтобы поправили работы именно административной части сайта?
То есть в конфиг таблицы подсунул свой путь к процессору. Похожий js-файл подгрузить к странице каким-нибудь событием. У меня было минишоповское msOnManagerCustomCssJs, в тикетах может быть своё, не знаю. Или родными движка подключить скрипт к админке. Но это всё конечно имеет смысл, если реально данные выбираются не самым лучшим способом. Ну или используются всякие там MODXовские методы, проверка прав и т.д. Они могут снизить скорость. В конце концов в процессоре можно хоть на чистом SQL данные из БД получить. Так что тут вопрос не в движке или ограничениях админки, а в умении выбирать данные из БД, ну и целесообразности применения каждого способа. Где-то прокатит getCollection, а где-то нет.
Думаю, если вы хотите максимальной производительности, то на готовых решениях не будет все комфортно. Советую делать свои таблицы и поиск (а лючше посмотреть поиск в сторону специализированных решений, например Sphinx).
Запрос отрабатывается чуть быстрее, на 5-10 секунд. Но это не решает проблемы.
Однозначно нужно переделывать/разделять запрос.