У меня много проблем с неэффективностью node_save (). Но спасает ли узел мою проблему? В конечном итоге это то, что я пытаюсь выяснить.
Я создал цикл с 100 000 итераций. Я создал минимум для того, чтобы объект узла был действительным и сохранялся правильно. Вот код сохранения узла:
$node = new stdClass();
$node->type = "test_page";
node_object_prepare($node);
$node->uid = 1;
$node->title = $node_title;
$node->status = 1;
$node->language = LANGUAGE_NONE;
if($node = node_submit($node)){
node_save($node);
}
Вот результаты:
100 000 узлов были сохранены, каждый с помощью node_save (). Это заняло 5196,22 секунды. Это только 19 экономит секунду.
По меньшей мере, это неприемлемо, особенно когда этот человек получает около 1200 отдельных запросов на вставку в секунду , а этот человек получает 25 000 вставок в секунду .
Итак, что здесь происходит? Где узкое место? Это с функцией node_save () и как она разработана?
Может ли это быть мое оборудование? Мое оборудование - это сервер разработки, на котором нет никого, кроме меня - двухъядерный Intel, 3Ghz, Ubuntu 12.04 с 16 гигабайтами оперативной памяти.
В то время как цикл работает, мой ресурс использует: MySQL 27% CPU, 6M RAM; PHP 22% CPU 2M RAM.
Моя конфигурация mysql была сделана мастером Percona .
Mysql говорит, что если загрузка моего процессора ниже 70%, моя проблема связана с диском . Конечно, у меня есть только пробег мельницы WD Caviar 7200 об / мин, но я должен получить более 19 вставок в секунду с этим, я надеюсь!
Не так давно я писал о сохранении 30 000 узлов в день . Однако, чтобы было ясно, этот узел не имеет никакого отношения к каким-либо внешним силам. Это просто тест, чтобы узнать, как увеличить скорость вызовов node_save ().
На самом деле мне нужно каждую минуту получать 30 000 элементов в базу данных с помощью node_save. Если сохранение узла не является опцией, мне интересно, могу ли я написать свою собственную API-функцию drupal "node_batch_save ()" или что-то, что использует способность mysql выполнять массовые вставки с помощью запроса INSERT . Мысли о том, как подойти к этому?