sql >> Database >  >> RDS >> Mysql

Heeft mySQL-replicatie onmiddellijke gegevensconsistentie?

Consistentie in de zin dat het wordt gebruikt in ACID betekent dat aan alle beperkingen wordt voldaan voor en na elke wijziging. Wanneer een systeem ervoor zorgt dat u geen gegevens kunt lezen die inconsistent zijn, zeggen ze bijvoorbeeld dat u nooit gegevens zult lezen waar een onderliggende rij verwijst naar een niet-bestaande bovenliggende rij, of waar de helft van een transactie is toegepast maar de de andere helft is nog niet toegepast (het schoolvoorbeeld is het debiteren van één bankrekening maar nog niet bijgeschreven op de bankrekening van de ontvanger).

Replicatie in MySQL is standaard asynchroon, of op zijn best "semi-synchroon". Het blijft in beide gevallen zeker achter. In feite blijft de replica van de replicatie altijd minstens een fractie van een seconde achter, omdat de master geen wijzigingen in zijn binaire log schrijft totdat de transactie wordt vastgelegd, waarna de replica het binaire log moet downloaden en de gebeurtenis moet doorgeven.

Maar de veranderingen zijn nog steeds atomair. U kunt geen gegevens lezen die gedeeltelijk zijn gewijzigd. U leest ofwel vastgelegde wijzigingen, in welk geval aan alle beperkingen is voldaan, of anders zijn de wijzigingen nog niet vastgelegd, in welk geval u de status van de gegevens ziet van voordat de transactie begon.

Dus misschien lees je tijdelijk oud gegevens in een replicatiesysteem dat achterblijft, maar u leest niet inconsistent gegevens.

Terwijl u in een "uiteindelijk consistent" systeem gegevens kunt lezen die gedeeltelijk zijn bijgewerkt, waarbij de ene rekening is gedebiteerd maar de tweede nog niet is gecrediteerd. Dus je kunt zie inconsistente gegevens.

U hebt gelijk dat u wellicht voorzichtig moet zijn met het lezen van replica's als uw toepassing absoluut actuele gegevens vereist. Elke applicatie heeft een andere tolerantie voor replicatievertraging, en in feite hebben verschillende query's binnen één applicatie een verschillende tolerantie voor vertraging. Ik heb hierover een presentatie gegeven:Lezen/schrijven splitsen voor MySQL en PHP (Percona-webinar 2013)



  1. Upgrade MySQL naar MariaDB 10 (deel 1 - installeer MariaDB 5.5)

  2. Joomla MySQL-prestaties

  3. Wat zijn de verschillen tussen een geclusterde en een niet-geclusterde index?

  4. hoe alleen dagen tussen twee datums te berekenen in postgres sql-query.