조회 > 티켓 예매 > 예매 완료 or 실패
MySQL
장점
대규모 데이터에도 안정적이며, 복제(replication) 및 샤딩(sharding)을 지원해 확장성이 좋습니다.
복제? 샤딩? 대규모 데이터에도 안정적인 이유는?
- 복제 (Replication): 복제는 기본적으로 데이터의 복사본을 만드는 과정입니다. 데이터를 여러 위치에 복사함으로써 가용성과 내구성을 향상시킵니다. 만약 한 서버가 다운되면, 그 데이터의 복사본이 다른 서버에 있기 때문에 서비스는 계속될 수 있습니다. 복제는 일반적으로 읽기 부하를 분산시키는 데 유용하며, 일부 시나리오에서는 데이터 복구나 백업 전략의 일부로 사용됩니다.
- 샤딩 (Sharding): 샤딩은 데이터를 여러 데이터베이스에 분산시키는 과정입니다. 각 데이터베이스를 '샤드'라고 부릅니다. 큰 테이블을 여러 작은 테이블로 나누는 것이라고 생각하면 됩니다. 이렇게하면 데이터베이스 시스템의 부하를 줄이고, 전체적인 성능을 향상시키는 데 도움이 됩니다. 샤딩은 쓰기 부하를 분산하는 데 특히 유용하며, 데이터의 확장성을 향상시킵니다.
- 대규모 데이터에도 안정적인 이유 : 복제와 샤딩을 통해 데이터와 요청을 여러 서버로 분산시키면, 이러한 문제를 완화하고 전체 시스템의 부하를 줄일 수 있습니다. 따라서 복제와 샤딩은 대규모 데이터를 안정적으로 처리하는 데 중요한 역할을 합니다.
단점
복잡한 쿼리나 큰 데이터 집합에 대한 처리 속도가 상대적으로 느릴 수 있습니다.
왜 처리속도가 느리지?
- 쿼리 최적화: MySQL은 쿼리 최적화가 다른 일부 데이터베이스 시스템(예: Oracle이나 PostgreSQL)보다 상대적으로 약합니다. 따라서 복잡한 쿼리의 경우, MySQL의 쿼리 플래너가 항상 최적의 실행 계획을 선택하지 못할 수 있습니다.
- 읽기-쓰기 잠금: InnoDB 스토리지 엔진은 행 수준의 잠금을 지원하지만, 복잡한 쿼리나 큰 데이터 집합을 처리할 때, 테이블 수준 또는 페이지 수준의 잠금이 발생할 수 있습니다. 이러한 잠금은 다른 쿼리의 실행을 지연시키며, 따라서 전체적인 성능을 떨어뜨릴 수 있습니다.
- 리소스 제한: MySQL 서버의 설정은 처리 가능한 쿼리의 크기나 복잡성에 제한을 둘 수 있습니다. 예를 들어, **
sort_buffer_size
**나 **join_buffer_size
**와 같은 설정 값들은 복잡한 쿼리의 성능에 영향을 줄 수 있습니다.