ct-study / designing-data-intensive-applications

2 stars 0 forks source link

[4주차] 다중 객체 트랜잭션과 복제와 일관성 #27

Open hagyutae opened 10 months ago

hagyutae commented 10 months ago

지난주에는 쓰기 후 읽기와 관련해서 복제와 일관성 문제에 논의했는데, 다중 객체 트랜잭션의 경우 복제가 어떻게 되려나...? 그에 따른 쓰기 후 읽기 일관성 문제는?

xogml123 commented 10 months ago

MySQL 복제에서 업데이트 중에 원자성을 유지하는 것은 마스터와 슬레이브 간의 데이터 일관성을 보장하기 위해 중요합니다. SQL 문이 복제되는 문장 기반 복제(statement-based replication)을 사용하지 않고 행 기반 복제(row-based) 또는 혼합 포맷 복제(mixed-format replication)를 사용한다면 여전히 다음 원칙을 따라 원자성을 유지할 수 있습니다.

트랜잭션 기반 업데이트: 마스터에서 업데이트는 트랜잭션으로 래핑되어야 합니다. 이는 BEGIN으로 시작하고 하나 이상의 UPDATE 문을 수행한 다음 COMMIT 또는 ROLLBACK을 사용하여 트랜잭션을 완료하거나 취소하는 것을 의미합니다.

복제 모드: 마스터와 슬레이브 양쪽에서 행 기반 또는 혼합 포맷 복제를 사용하세요. 이렇게 하면 마스터에서 슬레이브로 행 수준의 변경 내용이 올바르게 전파됩니다.

트랜잭션 격리 수준: 응용 프로그램에 적합한 트랜잭션 격리 수준을 설정하세요. MySQL의 기본 격리 수준은 일반적으로 "REPEATABLE READ"이며 트랜잭션을 서로 격리하고 변경 내용을 일관되게 유지합니다. 필요한 경우 SET TRANSACTION 문을 사용하여 격리 수준을 설정할 수 있습니다.

일관성 확인: 응용 프로그램 코드에 일관성 확인을 구현하여 마스터와 슬레이브에서 업데이트의 결과를 확인하세요. 업데이트 전후에 쿼리 결과를 비교하여 데이터가 일관되게 유지되는지 확인할 수 있습니다.

모니터링 및 오류 처리: 모니터링 및 오류 처리 메커니즘을 구현하여 복제 오류를 감지하고 처리하세요. 복제 오류가 발생할 때 데이터 무결성을 보장하기 위해 수정 조치를 취하는 것이 중요합니다.

이러한 원칙과 관행을 준수함으로써 행 기반 또는 혼합 포맷 복제 환경에서도 업데이트가 마스터와 슬레이브 양쪽에서 원자적으로 적용되고 일관성을 유지할 수 있습니다. 이러한 관행을 준수하면 데이터 무결성을 유지할 수 있지만, 복제가 업데이트에 사용된 정확한 SQL 문을 복제하지 않고 행 수준에서 변경 내용을 복제할 수 있는 점을 고려하여 응용 프로그램과 데이터베이스 스키마를 신중하게 설계해야 합니다.

SuyeonChoi commented 10 months ago