Maison >Problème commun >La lecture virtuelle signifie-t-elle une lecture non répétable ?

La lecture virtuelle signifie-t-elle une lecture non répétable ?

藏色散人
藏色散人original
2020-05-21 11:29:032994parcourir

La lecture virtuelle signifie-t-elle une lecture non répétable ?

La lecture virtuelle est-elle une lecture non répétable ?

La lecture virtuelle et la lecture non répétable sont différentes.

Dirty reads dirty reads : cet événement se produit lorsqu'une transaction lit des données qui n'ont pas encore été validées. Par exemple : la transaction 1 modifie une ligne de données, puis la transaction 2 lit la ligne modifiée avant que la transaction 1 ne valide l'opération de modification. Si la transaction 1 annule l'opération de modification, alors les données lues par la transaction 2 peuvent être considérées comme n'ayant jamais existé.

Lectures non répétables : cet événement se produit lorsqu'une transaction lit deux fois la même ligne de données, mais que les données obtenues à chaque fois sont différentes. Par exemple : la transaction 1 lit une ligne de données, puis la transaction 2 modifie ou supprime la ligne et soumet l'opération de modification. Lorsque la transaction 1 tente de relire la ligne, elle obtient des valeurs de données différentes (si la ligne a été mise à jour) ou constate que la ligne n'existe plus (si la ligne a été supprimée).

Lecture fantôme : cet événement se produira si une ligne de données qui répond aux conditions de recherche apparaît lors d'une opération de lecture ultérieure, mais que la ligne de données n'appartient pas aux données d'origine. Par exemple : la transaction 1 lit certaines lignes qui répondent à une certaine condition de recherche, puis la transaction 2 insère une nouvelle ligne qui correspond à la condition de recherche de la transaction 1. Si la transaction 1 réexécute la requête qui a généré les lignes d'origine, elle obtiendra des lignes différentes.

Le scénario de transaction est le suivant :

Il y a 200 yuans sur le même compte bancaire A, A retire 100 yuans et B transfère 100 yuans sur le compte B. Si la transaction n'est pas isolée, les problèmes suivants peuvent survenir :

1. Le premier type de mise à jour perdue : d'abord, lorsque A retire de l'argent, il y a 200 yuans sur le compte, et en même temps, B transfère 200 yuans, puis A et B fonctionnent en même temps, et A fonctionne. Si 100 yuans sont retirés avec succès, l'opération de B échoue et est annulée. Le montant final du compte est de 200 yuans. écrasé et la banque perd 100 yuans.

2. Lecture sale : A retire 100 yuans mais ne le soumet pas. B effectue un transfert et découvre qu'il reste 100 yuans sur le compte. C'est A qui abandonne l'opération et revient en arrière, mais B. fonctionne normalement et le soumet. Le montant final du compte est de 0 yuan. B lit les données sales de A et le client perd 100 yuans.

3. Lecture virtuelle : Semblable à la lecture sale, elle vise le problème de lecture lors de l'opération d'insertion. Par exemple, le dépôt C de 100 yuans n'est pas soumis à ce moment-là, la banque fait un rapport. pour une enquête statistique et le compte est de 200 yuans, puis C l'a soumis. À ce moment-là, la banque a constaté que le solde du compte était de 300 yuans. Elle n'a pas été en mesure de déterminer lequel devait être utilisé comme base.

Tout le monde semble penser que les statistiques doivent être mises à jour de temps en temps, ce qui est normal mais ce n'est pas normal si les statistiques sont dans une transaction. Par exemple, une de nos applications statistiques doit séparer les statistiques. les résultats sont séparés en sortie sur l'écran de l'ordinateur et dans le fichier disque d'un ordinateur sur le réseau distant. Afin d'améliorer les performances et la réponse de l'utilisateur, nous les divisons en deux threads. d’abord et complété plus tard peuvent être incohérents, donc nous ne savons pas lequel devrait prévaloir.

4. Lecture non reproductible : A et B ont tous deux commencé à vérifier qu'il y avait 200 yuans sur le compte en même temps. A a commencé à retirer 100 yuans et les a soumis. À ce moment-là, B en a fait un autre. requête lors de la préparation de la mise à jour finale et a constaté que le résultat était de 100 yuans, alors B sera très confus, ne sachant pas s'il doit changer le compte à 100 ou 0. La différence entre

et la lecture sale est que la lecture sale lit les données sales non validées de la transaction précédente, tandis que la lecture non répétable relit les données qui ont été soumises par la transaction précédente.

5. Le deuxième type de mise à jour perdue : Il s'agit d'un cas particulier de lecture non répétable. Comme ci-dessus, B ne fait pas de seconde requête mais complète directement l'opération. Le montant final du compte est de 100. yuans, et l'opération de A est écrasée. Si elle chute, la banque perd 100 yuans. Cela ressemble au premier type de mise à jour perdue.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn