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

Apakah query antrian MySQL?

QUERI TIDAK SELALU BERJALAN PARALEL

Itu tergantung pada mesin basis data. Dengan MyISAM, hampir setiap kueri memperoleh kunci tingkat tabel yang berarti bahwa kueri dijalankan secara berurutan sebagai antrian. Dengan sebagian besar mesin lain, mereka dapat berjalan secara paralel.

echo_me mengatakan nothing happens at the exact same time and a CPU does not do everything at once

Itu tidak sepenuhnya benar. Ada kemungkinan bahwa DBMS dapat berjalan pada mesin dengan lebih dari satu cpu, dan dengan lebih dari satu antarmuka jaringan. Ini sangat tidak mungkin 2 kueri dapat tiba secara bersamaan - tetapi bukan tidak mungkin, oleh karena itu ada mutex untuk memastikan bahwa transisi pengupas/eksekusi hanya berjalan sebagai utas tunggal (eksekusi - tidak harus proses ringan yang sama).

Ada 2 pendekatan untuk memecahkan DML konkuren - baik untuk menggunakan transaksi (di mana setiap pengguna secara efektif mendapatkan tiruan dari database) dan ketika kueri telah menyelesaikan DBMS mencoba untuk merekonsiliasi setiap perubahan - jika rekonsiliasi gagal, maka DBMS memutar kembali salah satu dari kueri dan melaporkannya sebagai gagal. Pendekatan lainnya adalah dengan menggunakan penguncian tingkat baris - DBMS mengidentifikasi baris yang akan diperbarui oleh kueri dan menandainya sebagai dicadangkan untuk pembaruan (pengguna lain dapat membaca versi asli setiap baris tetapi setiap upaya untuk memperbarui data akan diblokir sampai baris tersedia lagi).

Masalah Anda adalah Anda memiliki dua klien mysql, yang masing-masing telah mengambil fakta bahwa ada satu item stok yang tersisa. Ini semakin diperumit oleh fakta bahwa (sejak Anda menyebutkan PHP) tingkat stok mungkin telah diambil dalam sesi DBMS yang berbeda dari penyesuaian stok berikutnya - Anda tidak dapat memiliki transaksi yang mencakup lebih dari permintaan HTTP. Oleh karena itu, Anda perlu memvalidasi ulang setiap fakta yang disimpan di luar DBMS dalam satu transaksi.

Penguncian optimis dapat membuat pseudo - mekanisme kontrol transaksi - Anda menandai catatan yang akan Anda ubah dengan stempel waktu dan pengidentifikasi pengguna (dengan PHP ID sesi PHP adalah pilihan yang baik) - jika ketika Anda datang untuk memodifikasinya, sesuatu yang lain telah mengubahnya, maka kode Anda mengetahui bahwa data yang diambil sebelumnya tidak valid. Namun hal ini dapat menyebabkan komplikasi lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengembalikan dump MySQL dari Host ke wadah Docker

  2. Gabungkan baris dalam id yang sama ke dalam array

  3. Pernyataan Kondisi - Php Mysqli

  4. akankah menampilkan status tabel menampilkan baris yang tepat dalam tabel?

  5. Spring Batch - JdbcCursorItemReader membuang OutOfMemoryError dengan tabel MySQL besar