Question

Je suis assez novice pour travailler avec plusieurs threads dans une base de données (la majeure partie de ma carrière a été consacrée à l’intégration).

Aujourd'hui, j'ai essayé de tester une application php simple que j'ai écrite pour stocker des valeurs dans une base de données mysql à l'aide de tables ISAM émulant des transactions à l'aide du verrouillage de table.

Je viens d'écrire un article de blog sur la procédure ici:

Tester avec JMeter

D'après mes résultats, mon simple application php semble conserver l'intégrité transactionnelle (comme le montrent les données de mes fichiers csv étant identiques à celles que j'ai extraites de la base de données):

Fichiers CSV:

alt csv pour al  alt csv pour bl

Requête de données pour les deux utilisateurs après l'exécution du test JMeter:

alt  alt

Ai-je raison de penser que l'intégrité des données transactionnelles est intacte?

Comment testez-vous la concurrence?

Était-ce utile?

La solution

Pourquoi ne pas utiliser InnoDB et obtenir le même effet sans verrou de table manuel?

Aussi, contre quoi vous protégez-vous? Considérez deux utilisateurs (Bill et Steve):

  1. Bill charge l'enregistrement 1234
  2. Steve charge l'enregistrement 1234
  3. Steve modifie l'enregistrement 1234 et le soumet
  4. Bill attend un peu, puis met à jour l'enregistrement obsolète 1234 et le soumet. Ces changements vont frapper Bill.

Le verrouillage de table n'offre pas une intégrité de données supérieure à celle du verrouillage de table MyISAM natif. MyISAM verrouille en mode natif les fichiers de la table lorsque cela est nécessaire pour empêcher la corruption des données.

En fait, InnoDB sur MyISAM est utilisé pour le verrouillage des lignes au lieu du verrouillage des tables. Il prend également en charge les transactions. Plusieurs mises à jour de différents enregistrements ne se bloquent pas et des mises à jour complexes de plusieurs enregistrements seront bloquées jusqu'à la fin de la transaction.

Vous devez prendre en compte le risque que deux mises à jour du même enregistrement se produisent simultanément pour votre application. S'il est probable que le verrouillage de table / ligne ne bloque pas la deuxième mise à jour, il le reporte jusqu'à la fin de la première mise à jour.

EDIT

De ce dont je me souviens, MyISAM a un comportement spécial pour les inserts. Il n'est pas du tout nécessaire de verrouiller la table pour une insertion, car elle ne fait qu'ajouter à la fin de la table. Cela peut ne pas être vrai pour les tables avec des index uniques ou des clés primaires non auto-incrémentées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top