2012-02-29 3 views
1

Мне нужно вставить миллионы узлов программным способом (импортировать данные из xml). У узла есть много полей cck, таких как фотографии, голоса, ссылки на узлы и другие. Есть ли советы по ускорению этого процесса (узлы сохраняются через drupal api node_save)?Drupal node_save speed up

Чтобы понять, что я пытаюсь найти, вот пример: нам не нужно очищать кеш при импорте данных, поэтому мы можем прокомментировать последнюю строку в функции node_save.

Любые другие полезные советы по производительности?

+2

Вы не можете ускорить 'node_save()' без взлома большого количества модулей ядра ... если скорость является проблемой, лучшим выбором будет изучение структуры базы данных и вставка записей вручную. – Clive

+0

Спасибо, похоже, что это только один вариант. – breethe

ответ

0

Я не знаю, для какой цели вам нужно создавать миллионы узлов программно, но существует модуль Devel и его документация на Document.

Я не уверен, сколько узлов можно создать сразу, используя этот модуль. Но это достойно проверить в вашем случае.

Проверить Сформировать содержание, который может:

«Ускорение развития вашего сайта или модуля с помощью быстрой генерации узлов, комментариев, условия, пользователей, и больше»

+0

Мне нужно импортировать данные из xml, а не создавать контент для тестирования. – breethe

+0

@breethe Вы не упомянули, что хотите создать узел из xml или excel. Вы отредактировали свой вопрос, пока я все получил ответ. –

0

Я имел решение для вас

Во-первых, вы должны разобрать .xml файл в .csv «запятая разделитель». вы можете использовать множество инструментов для этого, вам не нужно писать код. посмотреть на этом сайте

1- http://codestips.com/php-xml-to-csv/.

2- http://www.w3schools.com/php/func_filesystem_fgetcsv.asp.

3- Convert large XML file to CSV in PHP.

Второго: Установить Друпал импорт модуля примечания «http://drupal.org/project/node_import»

импорта узла вы будете импортировать файл CSV и в конфигурации вы будете установить, какой тип вам нужно создать с помощью этого файла. Также вам нужно указать ссылку на поля csv на выбранный тип контента. этот модуль будет генерировать узел для каждой записи csv. ex, если он содержит 100 строк, тогда будет создано 100 узлов. эта ссылка является шаг за шагом руководство «http://drupal.org/node/827750»

другое решение:

1 Является ли создать тип контента под названием Импорт и добавить загрузку поля файл (чтобы загрузить файл XML), а затем создать только один экземпляр.

2- Тогда зацепить node_api «операция отправить» добавить свой собственный код для разбора XML закачанного и итерацию по числу элементов, которые вы имеете в файле

3 Наконец, создать узел программным и установите его значение с дочерним значением элемента xml.

код для создания программного примечания:

$node = new stdClass(); 
//Main Node Fields 
$node->type = 'video'; //This can be any node type 
$node->created = time(); 
$node->changed = $node->created; 
$node->promote = 0; // Display on front page ? 1 : 0 
$node->sticky = 0; // Display top of page ? 1 : 0 
$node->format = 2; // 1:Filtered HTML, 2: Full HTML 
$node->status = 1; // Published ? 1 : 0 
$node->language = 'en'; 

/* Custom Fields of Video */ 
$node->title = $node->name = "string"; 
$node->field_video_id[0]["value"] = "string"; 
$node->field_updated[0]['value'] = "string"; 
// this code must be placed to save the created node 
if ($node = node_submit($node)) { 
node_save($node); 

drupal_set_message(t("Node " . $node->title . " added correctly")); 
} else { 
drupal_set_message(t("Node " . $node->title . " added incorrectly"), "error"); 
} 

Свяжитесь со мной для получения дополнительной информации.

+0

Спасибо, но вопрос не в том, как импортировать данные, а как ускорить процесс. Нашел один совет: нам не нужно очищать кеш после каждого node_save, поэтому мы можем прокомментировать эту строку в конце функции node_save. – breethe