Программное изменение большого числа нод

Аватар пользователя lohness

Есть скрипт, который изменяет ноды в цикле (2000-3000 нод за запуск).
Ноды грузяться node_load'ом и сохраняются node_save по одной штуке, скрипт работает крайне медленно. Какие есть альтернативные варианты? Вручную писать запрос конечно не хотелось бы- в ноде большой количество различных полей

Тип материала:
Версия Drupal:
0 Спасибо

Комментарии

Аватар пользователя lohness
lohness 2 года назад

А если сохранять ноды с помощью drupal_write_record? Ревизии не использую, самое главное обновить данные. Или это не даст особого прироста в скорости?

0 Спасибо
Аватар пользователя mbaev
mbaev 2 года назад
lohness написал:
Или это не даст особого прироста в скорости?

Даст, но это не try way.
Попробуйте node_load_multiple (немного ускорит).

С другой стороны если в ноде много полей, а вам нужно всего лишь проставить дату обновления, тогда не виду ничего страшного, чтобы обновить запросом (тем же drupal_write_record)

0 Спасибо
Аватар пользователя lohness
lohness 2 года назад

Памяти хватило бы на загрузку сразу всех нод :))
Обновляются как раз поля нод, причем практически каждое

0 Спасибо
Аватар пользователя mbaev
mbaev 2 года назад

В таком случае лучше делать через пакетные операции. Работу не ускорит, но будет правильнее.

0 Спасибо
Аватар пользователя kstukstu
kstukstu 2 года назад

Кроме пакетных операций есть смысл подумать над очередями - выполнять автоматически постепенно в фоновом режиме...

0 Спасибо
Аватар пользователя lohness
lohness 2 года назад

А как вообще работает node_save? Если я загружаю ноду node_load и сразу ее сохраняю друпал обновит только дату редактирования или сделает UPDATE по всем полям? Другими словами есть ли внутри этой функции механизм проверки были ли изменены данные?

0 Спасибо
Аватар пользователя lohness
lohness 2 года назад

Проверил сам, даже если загрузить ноду node_load(), а потом сразу ее сохранить node_save все таблицы field_data_[название_поля] и field_revision_[название_поля] обновляются (DELETE, INSERT). Это прискорбно. Страница просто загружающая ноду генерирует 150 запросов (Ubercart еще и свои таблицы дергает).

Есть ли способы как-то оптимизировать это?

0 Спасибо