Рейтинг:2

Термин таксономии сохраняется очень медленно

флаг ae

У меня есть словарный запас с более чем 15 тысячами терминов в многоуровневой иерархии. Недавно я заметил, что с таким объемом данных, когда я пытаюсь сохранить термин более высокого уровня (родительский для многих), сохранение занимает много времени.

Я проверил модуль webprofiler и увидел, что для такого одного термина выполняется около 10 тыс. запросов, включая запросы, которые он выполняет для своих дочерних элементов. Я не уверен, что это ожидается, но есть ли способ ускорить процесс? Эти запросы включают такие таблицы, как cache, path_alias, taxonomy_term_data, taxonomy_term_revision, key_value и т. д.

Я попытался применить memcached, который значительно сокращает количество запросов, особенно из таблиц кеша, но все же запросы дочерних терминов выполняются, что замедляет процесс.

Я также рассматривал возможность запуска процесса в фоновом режиме, но и в этом случае он якобы должен занимать такое же количество ресурсов сервера. Проблема настолько велика, что все мое приложение переходит в состояние остановки (иногда недоступно), когда я обновляю некоторые термины с помощью команды drush.

Любая помощь?

sonfd avatar
флаг in
У вас есть эта проблема при сохранении только одного термина через пользовательский интерфейс? Или вы видите проблему только при запуске команды drush, которая обновляет многие термины?
флаг ae
У меня есть эта проблема в любом месте, где я пытаюсь сэкономить срок. Будь то из пользовательского интерфейса или программно. Чем выше термин в иерархии, тем больше времени требуется.
Рейтинг:2
флаг ae

Я нашел причину, откуда возникла проблема. Это из модуля pathauto, который имеет хук обновления объекта, который загружает все дочерние элементы каждый раз, когда сохраняется термин таксономии. Это делается для обновления дочернего псевдонима вместе с сохраняемым родителем. Я подумываю открыть тикет в их очереди выдачи. Идея должна состоять в том, чтобы обновлять дочерние псевдонимы только тогда, когда они зависят от родительского атрибута. Например, /term/[имя-родительского-термина]/[имя-дочернего-термина].Мало того, в идеале он должен обрабатываться в обработчике очереди, возможно, с блокировкой транзакции. Надеюсь, это поможет кому-то.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.