'ComputerScience/Database' 카테고리의 글 목록
본문 바로가기

ComputerScience/Database

(24)
[Database] PostgreSQL의 데드 튜플 문제 https://www.cs.cmu.edu/~pavlo/blog/2023/04/the-part-of-postgresql-we-hate-the-most.html The Part of PostgreSQL We Hate the Most // Blog // Andy Pavlo - Carnegie Mellon UniversityThis article was written in collaboration with Bohan Zhang and originally appeared on the OtterTune website. There are a lot of choices in databases (897 as of April 2023). With so many systems, it’s hard to know what to..
[Database] 캐시 압력(Cache Pressure) 캐시 압력(Cache Pressure)캐시 압력이란?캐시 압력은 캐시 메모리가 부족해지면서 발생하는 문제를 말한다.캐시가 가득 차서 더 이상 새로운 데이터를 저장할 수 없고, 이로 인해 기존 데이터를 삭제해야 하는 상황이 발생할 수 있다.캐시 압력이 증가하면, 캐시 항목을 삭제하거나 새 데이터를 캐시에 저장하는 동안 대기 상태가 발생할 수 있다.캐시 압력 예시Spring에서 사용자별 페이징 데이터를 캐시에 저장하는 경우, 특히 대규모 사용자와 많은 데이터를 처리하는 시스템에서는 캐시 메모리가 빠르게 소진될 수 있으며, 이는 “캐시 쓰로틀링(Cache Throttling)” 또는 “캐시 압력(Cache Pressure)” 상황을 초래할 수 있다.이러한 상황은 캐시가 가득 차서 새로운 데이터를 저장할 수 ..
[Database] 분산 트랜잭션과 2PC, SAGA 패턴 분산 트랜잭션분산 트랜잭션은 여러 독립적인 시스템, 데이터베이스, 또는 서비스에 걸쳐 하나의 트랜잭션을 수행해야 할 때 발생한다.트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)을 보장한다(ACID 특성). 그러나 MSA 환경에서는 여러 마이크로서비스가 각기 다른 데이터베이스를 사용하거나, 다른 물리적 위치에 있을 수 있기 때문에, 이러한 ACID 특성을 분산 환경에서 보장하는 것은 매우 복잡하다.MSA에서의 분산 트랜잭션MSA에서는 각 마이크로서비스가 독립적으로 배포되고 운영되기 때문에, 여러 서비스 간의 데이터 일관성을 유지해야 하는 상황에서 자연스럽게 분산 트랜잭션의 필요성이 발생할 수 있다. 예를 들어, 한 서비스에서 ..
[Database] CQRS와 분산 읽기/쓰기 DB 구성, 데이터 일관성 모델 (최종 일관성, 강력한 일관성) CQRS (Command and Query Responsibility Segregation)CQRS는 명령(Command)과 조회(Query) 작업의 책임을 분리하는 패턴이다. 이 패턴의 핵심 아이디어는 다음과 같다.명령(Command): 데이터의 상태를 변경하는 작업을 담당한다. 예를 들어, 데이터베이스에 새로운 데이터를 삽입하거나 기존 데이터를 수정하는 작업이다.조회(Query): 데이터를 읽는 작업을 담당한다. 데이터베이스에서 데이터를 조회하여 사용자에게 제공하는 역할을 한다.이 패턴에서 명령과 조회는 서로 다른 모델로 구현될 수 있으며, 심지어 서로 다른 데이터 저장소를 사용할 수도 있다.기존 데이터베이스 모델의 문제점데이터베이스의 쿼리와 업데이트에 동일한 데이터 모델을 사용하는 경우, 아래와 같..
[Database] DBCP (DB connection pool)과 hikariCP, MySQL을 기준으로 백엔드 애플리케이션이 API 요청을 받으면 종종 데이터를 검색하거나 조작하기 위해 데이터베이스와 상호작용해야 합니다. 이 상호작용은 데이터베이스에 쿼리를 보내고 데이터베이스가 쿼리에 응답하는 과정을 포함합니다. 데이터를 처리한 후 애플리케이션은 API 요청자에게 응답을 보냅니다. 백엔드와 데이터베이스 간의 통신은 TCP(Transmission Control Protocol)를 통해 이루어집니다. TCP는 데이터 전송에서 높은 신뢰성을 제공하기 때문에 선택됩니다. TCP 연결을 설정하는 과정에는 연결을 열기 위한 3-way handshake와 연결을 닫기 위한 4-way handshake가 포함됩니다. TCP는 신뢰할 수 있는 통신을 보장하지만, 쿼리를 실행할 때마다 Connection을 열고 닫는 과정은..
[Database] DB MVCC와 PostgreSQL, MySQL의 동작 비교 기존 Lock based Concurrency Control read-lockwrite-lockread-lockOXwrite-lockXX 위 표는 각 read와 write lock의 호환 관계를 나타낸 표이다.예를 들어 두 Transaction이 모두 read-lock + read-lock을 가지고 있을 때는 block이 될 필요 없지만, 한 Transaction이 read-lock, 다른 Transaction은 write-lock을 가지고 있을 경우 둘 중 하나만 실행이 가능하며, 다른 한쪽은 unlock 할 때까지 기다려야 한다. 이러한 호환성 문제를 개선하기 위해서 MVCC(Multiversion Concurrency Control)가 등장한다.MVCC (Multiversion Concurrency..
[Database] LOCK을 활용한 concurrency control 기법 + 2PL (two-phase locking) Lock여러 Transaction이 같은 데이터에 read / write를 한다면 예기치 못한 데이터 변경이 일어날 수 있다.이를 막기 위해 데이터를 Lock이라는 장치를 설정하여, Lock을 취득하기 전까진 그 데이터의 read/write를 못하게 막을 수 있다. Write Lock (Exclusive Lock)read / write(insert, modify, delete)할 때 사용한다.다른 transaction이 같은 데이터를 read / write 하는 것을 허용하지 않는다.write 할 때만 사용하는 것은 아니다. Read Lock (Shared Lock)read 할 때 사용한다.다른 transaction 같은 데이터를 read 하는 것은 허용한다.Lock을 사용한 시나리오상황Transacti..
[Database] DB concurrency control: schedule과 serializability, recoverability Lost Update 현상데이터베이스 시스템에서 Lost Update는 동시에 실행되는 두 트랜잭션이 동일한 데이터 항목을 업데이트하여 이전 업데이트가 손실되는 현상을 의미합니다.다음과 같은 상황에서 발생할 수 있습니다. Alice가 Transaction을 시작합니다.동시에 Bob도 Transaction을 시작합니다. 이 때 Product의 quantity와 likes는 Alice, Bob에게 각각 7, 5 입니다.Alice가 product의 quantity를 6으로 Update 합니다.Bob은 product의 quantity를 10으로 Update 합니다.Alice는 자신의 Update를 Commit 하여 DB에 반영합니다.Bob 또한 자신의 Update를 Commit 하여 DB에 반영합니다. 결과적으..