Saya mengalami banyak masalah dengan inefisiensi node_save (). Tetapi apakah simpul menyelamatkan masalah saya? Pada akhirnya itulah yang saya coba cari tahu.
Saya membuat satu lingkaran dengan 100.000 iterasi. Saya membuat minimum untuk objek node agar valid dan menyimpan dengan benar. Inilah node save code:
$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);
}
Inilah hasilnya:
100.000 node disimpan, masing-masing menggunakan node_save (). Butuh 5196,22 detik untuk selesai. HANYA 19 menghemat satu detik.
Untuk sedikitnya, itu tidak dapat diterima, terutama ketika orang ini mendapatkan sekitar 1.200 permintaan memasukkan per detik , dan orang ini mendapatkan 25.000 sisipan per detik .
Jadi, apa yang terjadi di sini? Dimana kemacetannya? Apakah ini dengan fungsi node_save () dan bagaimana ia dirancang?
Mungkinkah itu perangkat keras saya? Perangkat keras saya adalah server pengembangan, tidak ada seorang pun di atasnya kecuali saya - Intel dual core, 3Ghz, Ubuntu 12,04 dengan 16 gigs of ram.
Sedangkan loop menjalankan penggunaan sumber daya saya adalah: MySQL 27% CPU, 6M RAM; PHP 22% CPU 2M RAM.
Konfigurasi mysql saya dilakukan oleh wizard percona .
Mysql mengatakan bahwa jika penggunaan CPU saya di bawah 70% masalah saya adalah disk terikat . Memang, saya hanya memiliki menjalankan pabrik WD Caviar 7200 RPM, tapi saya harus mendapatkan lebih dari 19 sisipan sebentar dengan itu saya harap!
Belum lama ini saya menulis tentang menghemat 30.000 node dalam sehari . Namun, untuk menjadi jelas, simpul ini tidak ada hubungannya dengan kekuatan eksternal apa pun. Ini murni patokan untuk mempelajari tentang cara meningkatkan kecepatan panggilan ke node_save ().
Secara realistis, saya perlu memasukkan 30.000 item ke dalam basis data setiap menit menggunakan node_save. Jika simpanan simpul bukan opsi, saya ingin tahu apakah saya dapat menulis fungsi api drupal saya sendiri "node_batch_save ()" atau sesuatu yang memanfaatkan kemampuan mysql untuk melakukan penyisipan massal dengan permintaan INSERT . Pikiran tentang bagaimana mendekati ini?