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:

Test con JMeter

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:

alt csv per al  alt csv per bl

Richiesta di dati per entrambi gli utenti dopo l'esecuzione del test JMeter:

alt  alt

Ho ragione nel ritenere che l'integrità dei dati transazionali sia intatta?

Come testare la concorrenza?

È stato utile?

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):

  1. Bill carica il record 1234
  2. Steve carica il record 1234
  3. Steve modifica il record 1234 e invia
  4. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top