DB/etc
-
기존 서비스에 api 중에서 getOOO 수행 시, OOO가 없는 경우에는 insert를 하는 케이스가 존재하고 있다. 이 API의 로직을 확인해 보면 Mybatis를 이용해서 insert문에 아래와 같이 중복 처리를 해주었다.INSERT INTO TABLE_NAME VALUES () ON DUPLICATE KEY UPDATE 해당 부분을 포함하는 API를 JPA로 전환하는 과정에서 위의 SQL은 사용할 수 없다는 것을 알게 되었고우선 해당 부분은 고려하지 않고 전환을 하고 테스트를 진행해 보았다. 특정한 이유로 client 측에서 해당 api를 동시에 호출하게 되면중복 insert가 발생하게 되었다. ConstraintViolationExceptiono.h.engine.jdbc.spi.SqlExce..
비관적 락 데드락 발생 내역 (Pessimistic Lock and DeadLock)기존 서비스에 api 중에서 getOOO 수행 시, OOO가 없는 경우에는 insert를 하는 케이스가 존재하고 있다. 이 API의 로직을 확인해 보면 Mybatis를 이용해서 insert문에 아래와 같이 중복 처리를 해주었다.INSERT INTO TABLE_NAME VALUES () ON DUPLICATE KEY UPDATE 해당 부분을 포함하는 API를 JPA로 전환하는 과정에서 위의 SQL은 사용할 수 없다는 것을 알게 되었고우선 해당 부분은 고려하지 않고 전환을 하고 테스트를 진행해 보았다. 특정한 이유로 client 측에서 해당 api를 동시에 호출하게 되면중복 insert가 발생하게 되었다. ConstraintViolationExceptiono.h.engine.jdbc.spi.SqlExce..
2025.01.08 -
Consistency, Availability, Partition tolerance3가지를 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다는 정리. 그림에서 가운데 영역에 들어가는 시스템은 존재할 수 없다. 각각의 요소들의 정의를 알아보자consistency 일관성모든 노드가 같은 순간에 같은 데이터를 볼 수 있다모든 노드는 동일한 데이터를 동시에 본다. 추가 읽기를 허용하기 전에 여러 노드를 업데이트하여 일관성을 확보한다분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐와 관계없이 언제나 같은 데이터를 보게 되어야 한다availability 가용성모든 요청이 성공 또는 실패 결과를 반환할 수 있다하나 이상의 노드가 작동 중지되어도 데이터를 요청하는 클라이언트는 반드시 응답을 받아야 ..
CAP 정리(브루어의 정리)Consistency, Availability, Partition tolerance3가지를 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다는 정리. 그림에서 가운데 영역에 들어가는 시스템은 존재할 수 없다. 각각의 요소들의 정의를 알아보자consistency 일관성모든 노드가 같은 순간에 같은 데이터를 볼 수 있다모든 노드는 동일한 데이터를 동시에 본다. 추가 읽기를 허용하기 전에 여러 노드를 업데이트하여 일관성을 확보한다분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐와 관계없이 언제나 같은 데이터를 보게 되어야 한다availability 가용성모든 요청이 성공 또는 실패 결과를 반환할 수 있다하나 이상의 노드가 작동 중지되어도 데이터를 요청하는 클라이언트는 반드시 응답을 받아야 ..
2024.06.29 -
mysql에서는 다양한 방법의 중복 데이터 관리 방식이 있다 각각의 방식들을 한번 알아보도록 하자 insert ignore replace on dupicate key update 중복으로 인지하는 경우는 아래와 같다 데이터 삽입 시, PRIMERY KEY나 UNIQUE KEY가 중복되었을 경우 insert ignore 새로 추가로 온 insert 무시 INSERT IGNORE INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0); replace 기존의 레코드를 삭제하고 다시 데이터 삽입 레코드가 삭제되고 다시 삽입되기 때문에 AUTO_INCREMENT로 ID값을 지정했을 경우 ID값이 변한다 REPLACE INTO TABLE_NAME (..
[MySQL] 중복 데이터 관리(on duplicate key update..)mysql에서는 다양한 방법의 중복 데이터 관리 방식이 있다 각각의 방식들을 한번 알아보도록 하자 insert ignore replace on dupicate key update 중복으로 인지하는 경우는 아래와 같다 데이터 삽입 시, PRIMERY KEY나 UNIQUE KEY가 중복되었을 경우 insert ignore 새로 추가로 온 insert 무시 INSERT IGNORE INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0); replace 기존의 레코드를 삭제하고 다시 데이터 삽입 레코드가 삭제되고 다시 삽입되기 때문에 AUTO_INCREMENT로 ID값을 지정했을 경우 ID값이 변한다 REPLACE INTO TABLE_NAME (..
2023.12.26 -
파티션(Partition)은 MySQL 서버 입장에서 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 솔루션이다. -> 크기가 큰 테이블을 물리적으로 여러 개로 분할 해주는 기능 하나의 DBMS 서버에서 테이블을 분산하는 것, 원격 서버 간의 분산을 지원하는 것이 아니다. MySQL 5.1부터 제공되는 기능이다. 파티션을 사용하는 이유 1. 테이블의 사이즈가 커져, 인덱스의 크기도 커지는 경우 - 쿼리가 느려짐 파티션을 이용하여 테이블 분할 할 경우, 인덱스도 각각 생성되어 인덱스 크기가 작아짐 메모리에서 빠르게 쿼리 작업을 진행할 수 있음 2. 주기적으로 삭제 등의 작업이 이루어지는 히스토리 성 데이터의 효율적인 관리 히스토리성..
[MySQL] Partition 파티션 이란파티션(Partition)은 MySQL 서버 입장에서 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 솔루션이다. -> 크기가 큰 테이블을 물리적으로 여러 개로 분할 해주는 기능 하나의 DBMS 서버에서 테이블을 분산하는 것, 원격 서버 간의 분산을 지원하는 것이 아니다. MySQL 5.1부터 제공되는 기능이다. 파티션을 사용하는 이유 1. 테이블의 사이즈가 커져, 인덱스의 크기도 커지는 경우 - 쿼리가 느려짐 파티션을 이용하여 테이블 분할 할 경우, 인덱스도 각각 생성되어 인덱스 크기가 작아짐 메모리에서 빠르게 쿼리 작업을 진행할 수 있음 2. 주기적으로 삭제 등의 작업이 이루어지는 히스토리 성 데이터의 효율적인 관리 히스토리성..
2022.08.11