본문 바로가기

DB

(2)
락 없이 데이터를 읽자! - MVCC in MySQL(InnoDB) 해당 글은 MySQL에서 InnoDB 엔진을 사용했을 때의 동작 원리를 기준으로 작성되었습니다.InnoDB가 아닌 다른 스토리지 엔진(ex. MyISAM)에선 존재하지 않는 개념일 수 있습니다. 안녕하세요 머랭입니다. 오늘은 데이터베이스의 핵심 기능 중 하나인 MVCC(다중 버전 동시성 제어), 그리고 MVCC 구현의 중심에 있는 Read View에 대해 알아보겠습니다. 백엔드 개발자라면 "DB 트랜잭션"이라는 말을 지겹게 들었을 겁니다.여러 사용자가 동시에 데이터를 읽고 쓸 때, 데이터의 일관성을 지키는 것은 정말 중요한데요.일관성을 지키기 위해 사용할 수 있는 가장 단순한 방법은 락(Lock)입니다. 일관성을 지키기 위한 간단한 방법 - 베타 락과 공유 락 트랜잭션 A가 R1(레코드)에 대해 읽기..
캐싱, 개념과 읽기 전략들 다음과 같은 상황을 가정해보자. 상품 판매 서비스를 개발하고 있다.상품 조회 API를 개발하고 있는데, 상품의 정보는 거의 바뀌지 않지만, 매 요청마다 DBMS에 쿼리를 날려 다시 조회하고 있다. 이 상황의 문제점은 다음과 같다. 변경 빈도가 매우 낮은 데이터를 얻기 위해 매번 DB에 쿼리를 보내 애플리케이션의 성능이 떨어지고 있다! 이것이 왜 문제일까? 1. DBMS는 기본적으로 Disk에 데이터를 저장한다. Disk는 용량은 크지만, 접근 시간이 느리다는 단점이 있다.2. 상품 데이터가 100만개라고 가정하면, 매 조회마다 Disk에 접근해야 한다.3. 매번 DBMS에 쿼리를 날리지만, 응답 데이터는 거의 항상 똑같다.  이 비효율성을 해결하기 위해 똑똑한 사람들이 한 가지 방법을 생각해냈다. 변경이..