Рейтинг:0

Сохранение нескольких сущностей в одной транзакции

флаг br

У нас есть настраиваемая конечная точка API, которая обрабатывает данные для нескольких пользователей. К сожалению, у нас есть проблема с производительностью, потому что каждый раз, когда мы сохраняем объект пользователя, операция сохранения занимает 3-4 секунды. Очевидно, что это далеко не идеально, так как 10 пользователям потребуется 30-40 секунд, чтобы выполнить весь запрос...

Есть ли способ сохранить несколько сущностей одновременно (например, вы можете загрузить сразу несколько) или это просто еще одна проблема с плохой производительностью Drupal, с которой нам приходится смириться?

флаг cn
Я почти уверен, что в ядре для этого нет метода; имеет ли пользовательская сущность много полей на вашем сайте? Требуют ли другие объекты (разные типы, такие как узел) с таким же количеством полей такое же время для сохранения? Вы измеряете полный запрос в 3-4 секунды или вы специально профилировали операцию сохранения пользователя на эту длину? Если в первом случае вы сможете вычесть одну или две секунды из оценки для каждого объекта, поскольку это будет единовременным накладным расходом запроса.
BlondeSwan avatar
флаг br
зависит от того, что вы считаете "много полей", у нас есть около 80 полей в нашем пользовательском объекте. Однако в этой конкретной конечной точке мы обновляем только 5 из этих полей: 2 ссылки с несколькими значениями и 3 текстовых поля с несколькими значениями.
BlondeSwan avatar
флаг br
Это просто сохранение пользователя. Для запуска `JSON::decode($request->getContent)` требуется около 3-4 секунд, чтобы я мог работать с данными (что ужасно), затем
флаг cn
Да, это много полей, но теоретически это не должно иметь значения (https://drupal.stackexchange.com/a/234475/2800). Лучший совет, который я могу дать, чтобы профилировать операцию сохранения и выяснить, на что тратится время - это может быть не база данных, которая, надеюсь, даст вам другие потоки для отслеживания, чтобы улучшить ее, но в любом случае вы бы знали
BlondeSwan avatar
флаг br
Сама операция сохранения занимает 3-4 секунды.
флаг cn
Я имел в виду [профилируйте это немного более научно] (https://xdebug.org/docs/profiler), это покажет вам, на что действительно тратится время. Если вам повезет, у вашего хостинг-провайдера может быть что-то вроде New Relic.

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

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