Test di concorrenza e / o integrità transazionale in un'applicazione Web con JMeter
-
03-07-2019 - |
Domanda
Sono piuttosto nuovo a lavorare con più thread in un database (la maggior parte della mia carriera è stata spesa nel frontend).
Oggi ho provato a provare una semplice app php che ho scritto per archiviare i valori in un db mysql usando le tabelle ISAM che emulano le transazioni usando il blocco delle tabelle.
Ho appena scritto un post sul blog sulla procedura Qui:
Dai miei risultati, la mia semplice app php sembra mantenere intatta l'integrità transazionale (visto che i dati nei miei file CSV sono gli stessi dei dati che ho estratto nuovamente dal database):
File CSV:
Richiesta di dati per entrambi gli utenti dopo l'esecuzione del test JMeter:
Ho ragione nel ritenere che l'integrità dei dati transazionali sia intatta?
Come testare la concorrenza?
Soluzione
Perché non usare InnoDB e ottenere lo stesso effetto senza i blocchi manuali delle tabelle?
Inoltre, da cosa stai proteggendo? Considera due utenti (Bill e Steve):
- Bill carica il record 1234
- Steve carica il record 1234
- Steve modifica il record 1234 e invia
- Bill aspetta un po ', quindi aggiorna il record non aggiornato 1234 e invia. Questi cambiamenti ostacolano Bill's.
Il blocco delle tabelle non offre integrità dei dati più elevata rispetto al blocco delle tabelle MyISAM nativo. MyISAM bloccherà in modo nativo i file della tabella quando necessario per arrestare il danneggiamento dei dati.
In effetti, il motivo per utilizzare InnoDB su MyISAM è che eseguirà il blocco delle righe invece del blocco delle tabelle. Supporta anche le transazioni. Più aggiornamenti a record diversi non si bloccano a vicenda e aggiornamenti complessi a più record verranno bloccati fino al completamento della transazione.
È necessario considerare la possibilità che due aggiornamenti allo stesso record vengano eseguiti contemporaneamente per l'applicazione. Se è probabile, il blocco tabella / riga non blocca il secondo aggiornamento, lo rimanda solo fino al completamento del primo aggiornamento.
Modifica
Da quello che ricordo, MyISAM ha un comportamento speciale per gli inserti. Non è necessario bloccare affatto la tabella per un inserimento poiché si sta semplicemente aggiungendo alla fine della tabella. Ciò potrebbe non essere vero per le tabelle con indici univoci o chiavi primarie non autoincrementanti.