티스토리 뷰

반응형

 

1.락경합이란?

Lock Race Condition 이라고도 하며 DB 에서 같은 로우의 데이터를 삽입과 수정이 동시에 이루어지며

여러 개의 트랜잭션이 동시에 동일한 자원(데이터베이스 레코드, 파일 등)에 접근하여 변경을 시도할 때 발생한다.

 

=> 데이터베이스에서 여러 트랜잭션이 동시에 같은 데이터를 수정하려고 할 때 발생

 

 

2.예시설명

위에 테이블에다가 수초마다 db에 insert를 하는 과정에서 기존있는 데이터는 데이터가 다를경우 update를 진행하고,

새로운 데이면 insert를 진행하는 upsert를 진행하는 과정에서 락의 경합이 발생되어 대기시간이 지연되는것이라고 보면 될것같다.

 

3.해결방안

3-1. 테이블을 두개로 나눈다.

말그대로 테이블을 두개로 나눈것이다. A 테이블에 insert를 하면서, B테이블에 read시에 필요한 where 조건문 카테고리컬럼을 남긴후 하나의 프라이머리 키값으로 외부키를 통해 참조하는 형식 

 

이는 배열이 탐색시 PK 값을 안다면 상수시간을 이용하고, 추가삭제시 최악의경우 선형시간이 걸린다는 점에서 기안한다.

즉 업데이트는 A에서 PK를 찾아 B로 넘어가서 일을 (업데이트) 시키고, insert는 A에서 걸어 B로 이동시키게 하는법  

 

3-2. Insert, Delete만 실행 (update 제외)

업데이트를 실행하지않고 계속해서 Insert만 받아오는 방법 같은 유니크한값(거래번호) 에 여러가지 상태가다른 로우가 있다면 계속해서 쌓고 가장 최근에 값만 findFirst로 불러오는 방법 불러오는 과정에서 기존값을 지워도 되고, 나중에 한꺼번에 최근값 제외하고 지워도 되는 방법

 

3-3. 카프카

어떻게보면 카프카의 발을 들이여는 글이기도 한것같다 클라우드 업로드시 json으로 초당 300건, ssd 업로드시 초당2000건으로 한건올리고 (마무리되면 올리고) x 3 동기식방법인것같으나 그속도는 비동기 이상으로 빠른  우선순위 큐 메시징 플랫폼을 사용하면 빠른 로그처리가 가능

 

 

 

  • 카프카 SSD에서 초당 2000건 300건

 

그외 불필요한 인덱싱 삭제 및 여러 인덱싱을 한개로 합치는 방법이 있을 수 있다.  

반응형
댓글
공지사항
반응형