Bagaimana saya bisa mengunggah 1000 node per jam ke situs drupal 7 langsung dan menghindari kebuntuan?

9

Belum lama ini saya menulis tentang kebuntuan di sini: PDOException: SQLSTATE [40001]: Kegagalan serialisasi: 1213 Deadlock ditemukan ketika mencoba mendapatkan kunci;

Terlepas dari semua yang coba dilakukan oleh tim pengembangan saya, kami masih mendapatkan kesalahan seperti ini:

PDOException: SQLSTATE [40001]: Kegagalan serialisasi: 1213 Deadlock ditemukan ketika mencoba untuk mendapatkan kunci; coba mulai kembali transaksi: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (: db_insert_placeholder_0,: db_insert_placeholder_1,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_3,: db_insert_placeholder_placeholder; Array ([: db_insert_placeholder_0] => 1059 [: db_insert_placeholder_1] => 1059 [: db_insert_placeholder_2] => 0 [: db_insert_placeholder_3] => cck: field_item_location: 1059 [: db_insert_places_place__perempat_posisi_place__perempat_posisi_posisi_ tempat] /var/www/website.com/sites/all/modules/location/location.module).

Meskipun tabel spesifik dalam contoh itu, kami mendapatkan kesalahan ini di tabel lain.

Ini situasiku. Saya telah mengambil proyek Universitas besar. Pada waktu tertentu ada 50.000 warga kampus yang menggunakan sistem setiap hari. Selain itu, saya melakukan migrasi 100-an dari 1000-an item konten baik secara manual maupun melalui kode modul khusus (migrasi dari data universitas lama) ke situs Drupal 7 yang baru ini.

Kesalahan ini membunuh kita, ke titik di mana kita hampir siap untuk menghapus pekerjaan tahun terakhir dan pergi dengan sesuatu yang lain jika Drupal tidak dapat menangani jenis beban ini.

Tapi itu kurang lebih pertanyaan saya - Bagaimana Drupal dapat menangani jenis beban ini? Bagaimana saya bisa mengatur alur kerja saya untuk dapat menangani banyak kegiatan ini? Apakah ini masalah Drupal? Masalah basis data?

Secara khusus, saya menjalankan Ubuntu, LAMP menumpuk RAM 16GB. Saya terbuka untuk saran apakah itu terkait Drupal, terkait database, konfigurasi server terkait, atau alur kerja yang berbeda untuk bekerja dalam kemampuan Drupal, jadi jangan ragu untuk menyarankan apa pun jika Anda memiliki pengalaman dengan aktivitas sebanyak ini.

blue928
sumber
Ada sebuah artikel tentang mengimpor dataset besar evolvingweb.ca/story/…
kalabro
Terima kasih untuk itu. Sangat menggembirakan melihat bahwa volume data memang dapat diimpor hampir secara instan. Namun, bagaimana dengan masalah pengguna individu memposting melalui akun mereka sendiri melalui bentuk node? Ketika saya menggali dan menggali lebih dalam masalah ini, pertanyaan retoris di kepala saya tumbuh, "Bisakah Drupal menangani lalu lintas langsung sebanyak ini? Jika tidak, lalu apa gunanya?" Selain impor, kami memiliki tim sekitar 20 yang menambahkan konten secara normal melalui akun mereka. Bisakah 'simpul simpanan' Drupal benar-benar hanya menangani 20 pengguna simultan yang menambahkan data sekaligus?
blue928
Kami menguji situs Drupal kami dengan Apache JMeter menggunakan MySQL dan PostgreSQL. Untuk MySQL, hasil kami sekitar 20 node. Untuk PostgreSQL hasilnya jauh lebih baik.
kalabro

Jawaban:

5

Saya bekerja untuk universitas Stanford dan telah melakukan hal serupa. Kami terus-menerus harus memuat lebih dari 100.000+ node secara teratur. Kami telah mengerjakan kode pemuatan kustom kami sendiri selama 2 tahun sekarang telah dapat mempercepat proses yang cukup besar menggunakan pcntl_fork. Satu-satunya hal yang harus Anda ingat adalah untuk menutup semua koneksi soket sebelum memanggil garpu. Misalnya Anda harus menutup koneksi mysql, koneksi memcache dan bahkan koneksi mongo. Drupal akan secara otomatis membuat koneksi baru ketika tidak ada. Sejauh masalah kebuntuan, kami dapat memperbaiki masalah itu dengan meletakkan innodb_locks_unsafe_for_binlog = 1.

Patrick
sumber
apakah Anda memuatnya dalam batch dengan kode khusus atau menggunakan beberapa fungsi API drupal seperti node_save? Atau modul tipe migrasi? Juga apakah kode yang Anda sebutkan tersedia untuk tampilan publik? Akan menyenangkan untuk melihat bagaimana pcntl_fork terintegrasi dengan drupal untuk melihat Anda telah mengatasi kendala ini. Terima kasih atas tip binlognya!
blue928
2

Jawabannya adalah: Konfigurasikan file my.cnf MySQL Anda dengan benar.

Setelah sedikit lebih dari satu minggu penelitian, saya telah menemukan bahwa Drupal 7 memang dapat menangani lalu lintas input yang bersamaan ini.

Deadlock PDOExceptions ini terkait dengan file my.cnf MySQL tidak dioptimalkan dengan benar. Dengan bantuan dari grup Drupal High Performance dan sumber-sumber lain, tim kami tidak memiliki satu Deadlock terjadi sejak menerapkan pengaturan konfigurasi baru untuk MySQL. Kami menguji skrip batch kami untuk mensimulasikan hingga 500 pengguna saat ini yang menyimpan konten tanpa masalah. Lihat utasnya di sini.

http://groups.drupal.org/node/260938

Secara khusus, Dalin menyarankan menggunakan wizard untuk mendapatkan file konfigurasi dasar berdasarkan spesifikasi server dan tipe tabel. Setelah menggunakan ini, bahkan tanpa tweaker lebih lanjut, deadlock berhenti. Berikut ini tautan ke wizard jika Anda ingin mencobanya: https://tools.percona.com/wizard

Saya akan dengan senang hati mengirimkan file my.cnf jika ada yang merasa terbantu.

Meskipun masalah Deadlock tidak lagi menjadi masalah, kami sekarang mendapatkan kesalahan ini sangat sering:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 
1305 SAVEPOINT savepoint_1 does not exist: ROLLBACK TO SAVEPOINT savepoint_1; 
Array ( ) in file_usage_add() (line 661 of /var/www/website.com/includes/file.inc).

Mungkinkah ini masalah konfigurasi mysql juga?

blue928
sumber
Kami mulai melihat kesalahan itu sendiri. Apakah Anda pernah menemukan jawaban untuk pertanyaan Anda?
trimbletodd