read 3

캐시 전략

Redis의 캐싱 전략 개발을 할 때에 Redis를 통해서 값을 캐싱시켜 둔다면, 더 빠르게 값들을 처리할 수 있다. 이 이유를 간단하게 말하자면 DB를 통해 값을 가져오는 것 보다 캐시에 있는 데이터를 사용하면 성능면에서 더 빠르기 때문이다. 그렇기 때문에 cache miss(캐시된 데이터가 없어서 DB를 통해 해당 값을 가져온다.)를 적게 하고 cache hit(캐시된 데이터에서 바로 값을 가져옴)를 최대한으로 해야 한다. 또한 캐시는 RAM데이터를 사용하는데, 이게 데이터가 크지 않기 때문에 이를 잘 관리해야 한다. 즉 최대한 DB서버를 통하지 않고 Redis를 통해 값을 받을 수 있도록 하기 Redis의 크기를 효율적으로 관리하기 를 해내야 할 것이다. 이를 위한 전략들을 살펴보도록 한다. 읽기 ..

shared lock, exclusive lock

Shared lock과 Exclusive lock에 관하여 해당 lock들은 DB자체에서 걸어주는 lock으로, InnoDB의 Row-level lock이다. 이거랑 이거랑 이거를 읽고오면 좀더 이해가 쉬울 것이다. 간단히 예를 들어 설명하겠다. 예를 들어 DB에 다음과 같은 데이터가 있다고 가정해 보자 그런데 만약 A는 류찬의 외모를 읽음 B는 류찬의 외모를 잘생김에서 멋짐으로 변경 C는 류찬의 외모를 읽음 한다고 생각해보자. A Transaction에서 류찬의 외모를 가져오는 중(잘생김) B Transaction에서 류찬의 외모를 멋짐으로 변경(멋짐으로 변경) C Transaction에서 류찬의 외모를 가져옴 (멋짐) A Transaction에서 류찬의 외모를 가져옴 (잘생김) 이렇게 되는 이유는, ..

트랜잭션의 격리수준과 문제점, 그리고 해결법

트랜잭션의 격리수준 동시에 여러 트랜잭션을 처리할 때에, 얼마나 이들이 서로 고립되어 있는지를 의미한다. 즉, A라는 트랜잭션이 B라는 트랜잭션 내에서 변경한 데이터를 보는 기준점을 결정한다. 격리수준의 종류 이는 4가지로 분류할 수 있는데, READ UNCOMMITTED 커밋되지 않은 데이터를 읽을 수 있음 READ COMMITTED 커밋된 데이터만 읽을 수 있음 REPETABLE READ 트랜잭션 동안 같은 데이터를 읽을 수 있음 SERIALIZABLE 트랜잭션의 순차적 실행 이다. 한번 하나하나 살펴보자. READ UNCOMMITTED 아직 커밋되지 않은 데이터를 읽을 수 있는 격리 수준이다. 즉 Transaction의 COMMIT이나 ROLLBACK과 상관 없이 해당 트랜잭션의 데이터를 확인 가능..

1