Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Penghitung Pembaruan Volume Tinggi Mysql

Sudahkah Anda membagi klien menjadi mesin terpisah dari server? Itu adalah langkah pertama, kecil, dalam penskalaan.

Apakah Anda memiliki kueri replikasi dan readonly yang dikirim ke Slave? Itu dapat memungkinkan membaca tanpa batas penskalaan. (Tapi ini tidak menjawab pertanyaan UPDATE, selain untuk meringankan beban Master.)

115 IOP pada satu disk yang berputar akan cukup menjenuhkannya. innodb_flush_log_at_trx_commit default ke 1, yang mengarah ke setidaknya 1 IOP per transaksi. Beberapa solusi sementara (sampai lalu lintas Anda bertambah 10x lagi)...

SSD -- mungkin 1000 IOP.

Batch pembaruan (seperti yang disebutkan oleh @N. B.) Ini memotong 100x jumlah "flushes".

innodb_flush_log_at_trx_commit =2 -- untuk menghilangkan flush secara virtual (pada beberapa kehilangan keamanan).

Tetapi -- Bahkan jika Anda dapat melakukan UPDATE dengan cukup cepat, tidakkah Anda juga perlu membaca nilainya? Artinya, akan ada pertengkaran. Berapa banyak SELECT pada sama meja yang kamu lakukan? 100/detik mungkin baik-baik saja; 1000/dtk dapat menyebabkan begitu banyak gangguan sehingga tidak akan berfungsi.

Berapa besar mejanya? Agar semua ini berfungsi, itu harus cukup kecil untuk di-cache setiap saat.

Reddit adalah pendekatan lain -- tangkap pembaruan di sana. Kemudian terus-menerus menarik jumlah yang terakumulasi dan melakukan UPDATE yang diperlukan.

Sharding -- Di sinilah Anda membagi data di beberapa mesin. Memisahkan hash atau pencarian (atau kombo keduanya) dari userid adalah hal biasa. Kemudian UPDATE perlu mencari tahu mesin mana yang akan diperbarui, lalu lakukan tindakan di sana. Jika Anda memiliki 10 pecahan (mesin), Anda dapat mempertahankan hampir 10 kali kecepatan pembaruan. Pada akhirnya, ini adalah satu-satunya cara agar semua pemukul berat dapat menangani lebih dari 100 juta pengguna dan miliaran kueri/hari.

PARTISI sepertinya tidak akan membantu. Kode pemangkasan partisi belum cukup efisien untuk menghindari terlalu banyak overhead untuk kueri sekecil itu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prosedur tersimpan menyebabkan Perintah tidak sinkron pada kueri berikutnya

  2. Mendapatkan dua masalah saat menggunakan prosedur tersimpan di MySQL

  3. Permintaan MySQL mana yang lebih cepat?

  4. Bagaimana Anda mengubah jenis pemeriksaan untuk kolom MySQL?

  5. secara otomatis memperbarui bidang mysql berdasarkan nilai bidang lain