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

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

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

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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