Mysql
 sql >> база данни >  >> RDS >> Mysql

Репликацията на mySQL има ли незабавна последователност на данните?

Съгласуваност в смисъла, в който се използва в ACID, означава, че всички ограничения са изпълнени преди и след всяка промяна. Когато дадена система гарантира, че не можете да четете данни, които са несъвместими, те казват например, че никога няма да прочетете данни, където дъщерен ред препраща към несъществуващ родителски ред или където половината от транзакция е била приложена, но другата половина все още не е приложена (примерът от учебника е дебитиране на една банкова сметка, но все още не е кредитирана банковата сметка на получателя).

Репликацията в MySQL е асинхронна по подразбиране или в най-добрия случай "полусинхронна". Със сигурност изостава и в двата случая. Всъщност репликата на репликация винаги изостава поне за част от секундата, тъй като главният не записва промени в своя двоичен журнал, докато транзакцията не се ангажира, тогава репликата трябва да изтегли двоичния журнал и да препредаде събитието.

Но промените все още са атомни. Не можете да четете данни, които са частично променени. Вие или четете ангажираните промени, в който случай всички ограничения са удовлетворени, или промените все още не са ангажирани, в който случай виждате състоянието на данните от преди началото на транзакцията.

Така че може временно да прочетете старо данни в система за репликация, която изостава, но няма да прочетете непоследователни данни.

Докато в „евентуално последователна“ система може да прочетете данни, които са частично актуализирани, където едната сметка е била дебитирана, но втората сметка все още не е кредитирана. Така че можете вижте противоречиви данни.

Прав си, че може да се наложи да внимаваш при четене от реплики, ако приложението ти изисква абсолютно актуални данни. Всяко приложение има различен толеранс за забавяне на репликацията и всъщност в рамките на едно приложение различните заявки имат различен толеранс за забавяне. Направих презентация за това:Разделяне за четене/запис за MySQL и PHP (Уебинар на Percona 2013)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. utf8_bin срещу utf_unicode_ci

  2. набори от знаци в MySQL репликация

  3. MySQL дърво, подредено от родител и дете

  4. Получаването на условно отчитане на същия ред в MySQL / SQL

  5. Как да проверите дали таблица или колона съществува в база данни?