Ben node_save () verimsizliği ile ilgili çok sorun yaşıyorum. Ama düğüm sorunumu kurtarıyor mu? Nihayetinde bulmaya çalıştığım şey bu.
100.000 yinelemeli bir döngü oluşturdum. Düğüm nesnesinin geçerli olması ve doğru şekilde kaydedilmesi için minimum değeri oluşturdum. Düğüm kaydetme kodu:
$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);
}
Sonuçlar burada:
Her biri node_save () kullanan 100.000 düğüm kaydedildi. Tamamlanması 5196,22 saniye sürdü. Bu SADECE 19 saniyede bir tasarruf sağlar.
En azını söylemek gerekirse, özellikle bu kişi saniyede yaklaşık 1200 ayrı ekleme sorgusu alırken ve bu kişi saniyede 25.000 ekleme alıyorsa , bu kabul edilemez .
Peki, burada neler oluyor? Darboğaz nerede? Node_save () işleviyle birlikte mi ve nasıl tasarlanmış?
Bu benim donanımım olabilir mi? Donanımım bir geliştirme sunucusudur, benim dışında kimse yok - Intel çift çekirdekli, 3Ghz, Ubuntu 12.04, 16 gm ram.
Döngü çalışırken kaynak kullanımım: MySQL% 27 CPU, 6M RAM; PHP% 22 CPU 2M RAM.
MySQL yapılandırmam percona sihirbazı tarafından yapıldı .
Mysql, CPU kullanımımın% 70'in altında olması sorunumun diske bağlı olduğunu söylüyor . Verilmiş, değirmen WD Caviar 7200 RPM sadece bir çalışma var, ama umarım onunla bir saniye 19'dan fazla ekler almalıyım!
Çok uzun zaman önce bir günde 30.000 düğümü kaydetmeyi yazdım . Ancak açık olmak gerekirse, bu düğümün herhangi bir dış güçle hiçbir ilgisi yoktur. Bu, node_save () işlevine yapılan çağrıların hızını nasıl artıracağınızı öğrenmek için bir ölçüttür.
Gerçekçi olarak, node_save kullanarak her dakika veritabanına 30.000 öğe almak gerekir. Düğüm kaydetme bir seçenek değilse, kendi drupal api işlevi "node_batch_save ()" veya mysql INSERT sorgusu ile toplu ekler yapmak yeteneğinden yararlanan bir şey yazabilir miyim merak ediyorum . Buna nasıl yaklaşılacağına dair düşünceler?