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);
}
결과는 다음과 같습니다.
각각 node_save ()를 사용하여 100,000 개의 노드가 저장되었습니다. 완료하는 데 5196.22 초가 걸렸습니다. 19 초만 절약됩니다.
특히, 허용되지 않습니다 즉, 적어도 말을하려면 이 사람이 초당 1,200 개별 삽입 쿼리를 받고 , 그리고 이 사람이 초당 25,000 삽입을 받고있다 .
무슨 일이야? 병목 현상은 어디에 있습니까? node_save () 함수와 함께 설계되었으며 어떻게 설계 되었습니까?
내 하드웨어 일까? 저의 하드웨어는 저를 제외하고는 개발 서버입니다. Intel 듀얼 코어, 3Ghz, Ubuntu 12.04, 16 기가의 램.
루프가 실행되는 동안 내 리소스 사용량은 다음과 같습니다. MySQL 27 % CPU, 6M RAM; PHP 22 % CPU 2M RAM.
내 mysql 구성은 percona 마법사에 의해 수행되었습니다 .
Mysql에 따르면 내 CPU 사용량이 70 % 미만이면 내 문제는 디스크 바운드 입니다. 물론, 나는 WD Caviar 7200 RPM의 분쇄기만을 가지고 있지만, 나는 그것을 희망하는 초 당 19 개 이상의 인서트를 얻어야한다!
얼마 전에 나는 하루에 30,000 개의 노드를 절약하는 것에 대해 썼습니다 . 그러나 분명히이 노드는 외부 힘과는 아무런 관련이 없습니다. node_save () 호출 속도를 높이는 방법을 배우는 것은 전적으로 벤치 마크입니다.
실제로 node_save를 사용하여 1 분마다 데이터베이스에 30,000 개의 항목을 가져와야합니다. 노드 저장이 옵션이 아닌 경우 내 drupal api 함수 "node_batch_save ()"또는 INSERT 쿼리로 대량 삽입을 수행하는 mysql의 기능을 활용할 수있는 기능을 작성할 수 있는지 궁금 합니다 . 접근하는 방법에 대한 생각?