프로그래밍

DB에 저장된 특정 값을 증가나 차감시키는 update 쿼리는 어떤식으로 만들어야함??

단순 쿼리문이면 모르겠는데 조회수/추천수나 제품 수량이나 누적 포인트 차감 처리같이 사용자가 동시적으로 요청이 오는 서비스안에서는 lock이 걸릴텐데 이를 회피하려면 캐시말곤 답이 없나?

 

lock걸린다고 로직 수정이 필요하다는데 뭘 어케 해야하는지 감이 안잡힘;;

 

조회수나 추천수 같은거야 뭐 느슨하게 가도 상관없지만 지금 하는건 돈이랑 관련된 작업이다보니 느슨하게 잡을 수도 없고 ...

 

lock안걸리게 update 동시성 제어 하는방법은 없나?

20개의 댓글

2023.12.11

https://sqlfordevs.com/concurrent-updates-locking

0
2023.12.12
@개심심함

포인트는.. 잘모르겟네

0
@개심심함

insert작업때 pk충돌나면 값 업데이트 처리시키는걸로 카운트 누적시키게끔 한거네 ㅋㅋㅋㅋ 저런식으로도 되는구나

 

지금 상황하고는 안맞긴한데 그래도 좋은거 알아간다

 

난 저렇게 써볼 생각도 못해봄 ㅋㅋㅋ

0
2023.12.12

포인트 차감은 그냥 update 한번 하고 끝나는거 아님? update 할때는 당연히 해당 row에 lock이 걸리는거고, 다만 update 1건 같은 가벼운 작업은 lock 걸려있는 시간이 거의 없을테니 lock 걸려도 상관없는거고. 아니면 너무많은 여러개 작업이 하나의 트랜잭션으로 묶여서 처리돼서 lock 걸리는시간이 오래걸린다 이말인거야?

0
@무쳐

뭐 이벤트할 때 예산 제한 걸어두고 예산 소진되면 이벤트 종료 처리한다게 있잖아 여기서 일정 예산 금액 안에서 포인트를 제공해준다 할 때 테이블에 저장된 전체 예산을 차감시키거나 제공했던 포인트를 합산시키거나 하는 일을 말하고 싶었음

0
2023.12.12

이벤트를 쌓아,,,,, 그리고 이벤트 갯수로 통계를 내,,,,

2
@dsada12345

이벤트를 쌓는다는게 다른 테이블에 값을 쌓는걸 말하는거?

0
2023.12.12
@저소음흑축써주세요제발

이벤트주도 아키텍처 검색해봐

0
@dsada12345

ㄱㅅㄱㅅ

0
2023.12.12

테이블 구조가 어떤지는 몰겠는데

상품별로 데이터가 쌓이고, 그 상품의 조회수 컬럼을 update 하는게 목적이라는거 맞음?

근데 그게 lock이 걸리니 다른 방안을 제시하라는거고?

 

부하가 어느정도인지는 몰겟는데, 단순 조회수같은 수치는 그냥 임시테이블 하나 만들어서 insert 하고

job같은거로 주기적으로 집계 -> update -> delete 하면 안됨?

 

그리고 그 전에, 한줄 update 하는게 db 전체에 부하를 줄건 없을건데?

보통 한 줄 update 할땐 row level rock 이라 다른 row update에 영향 안주고, 수행시간 자체도 미리세컨단위라 그게 왜 문제라는건지 사실 잘 몰겠넹

1
2023.12.12
@Erino

물론 dbms에 따라 lock 걸리는 기본 설정 차이가 좀 있으니 참고하구...

0
@Erino

개인적으론 설계부터가 문제라고 보고있는편이긴함...

 

구조가 예산을 관리하는 테이블이 하나뿐이고 총 예산 안에서 사용자에게 포인트 제공을 하는 방식인 서비스인데

 

포인트 제공할 때 마다 예산에서 제공된 포인트만큼 차감시키는 업데이트 쿼리를 단순하게 짠 형태거든

0
2023.12.12
@저소음흑축써주세요제발

조회수, 추천수같이 신뢰도가 낮아도 되고 중요하지 않은 정보면 위에 작은대로 집계내서 분단위든 초단위든 한번에 update 하는식으로 해도 될겠지만

 

그런 포인트같이 신뢰도가 높아야하고 실시간성이 중요한거는 테이블에서 바로바로 update 해야하는게 맞다고 봄

 

다만, 그 테이블에 인덱스가 많이 설정되어있거나 데이터 자체가 많아서 느린게 문제가 되는 경우라면, 임시 테이블을 하나 별도로 만들어서 그 테이블에 포인트 관련 데이터를 하나 넣고, 그 테이블을 바라보도록 하면 훨씬 빠르게 운영할 수 있지 않을까?

그리고 그 임시 테이블에 있는 데이터 값도 주기적으로 본 테이블로 옮겨주고..

 

만약 단순한 테이블 부하 문제거나 db 설정으로 row level lock이 아니라 table level lock을 걸고 있는거면 이정도 조치로 해결 가능할거임

1
@Erino

고맙다... 내부적으로도 더 알아보긴 해야할듯...

0
2023.12.12

게임 개발자인데, 이런 경우는 당연히 공유 자원에 접근할 때마다 lock 걸었다 풀었다 하는게 맞지 않음?제품 수량같은 경우 유저가 동시에 접근하게 될 경우가 많을 텐데, lock 자체를 안 할 생각보다 설계를 유연하게 하는 게 더 맞을 듯? 예를 들어 특정 제품을 장바구니에 넣어놓고 결제 단계로 넘어가는 버튼을 누를 경우 우선 제품 수량을 lock 걸어서 안전하게 차감시키고 바로 풀어버리는 거지. 이렇게 되면 유저가 결제창에서 필요한 정보를 입력하는 동안 다른 유저가 안전하게 장바구니에 담거나 할 수 있게 될 듯.

만약 이런 게 아니라 진짜 멀티스레딩으로 공유 자원에 마구잡이로 접근이 가능할 수 있는 방법이 이론상 존재한다면 알려주세요

0
@덕덕고

나도 좀 당황스럽다. 저런걸로 락 피하게 로직 변경을 해달라는게...

 

그냥 해달라고만 하고 힌트도 안줌 ㅋㅋㅋㅋ

 

그래서 다른 서비스에선 지금 하는거랑 비슷한 로직은 어떻게 하는지 좀 알아봐야할듯

0
2023.12.12

추천 수를 디비에 저장하려면 비관적 락 걸수밖에 없는거 같은데… 아니면 위에 답처럼 이벤트 자체를 저장해서 필요할때마자 카운트하던가

0
@classica33

이벤트 쌓는다는게 다른 테이블에다가 증가나 차감시킬 데이터를 쌓아두는걸 말하는거야?

0
2023.12.12
@저소음흑축써주세요제발

ㅇㅇ 대충 누가 언제 엄지척 함! 이런거 기록한거

0
2023.12.12
@저소음흑축써주세요제발

포인트 관리라묜 포인트 증감 값을 매번 기록하고 필요할때 디비에서 로우 다 가져온다음에 합계하는거지.

 

락을 절대 못 쓰게하면 이렇게 해여지 뭐

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
5711 [프로그래밍] 컴포즈 Box 컴포넌트가 안 나와... 1 집에가게해줘 0 1 일 전 100
5710 [프로그래밍] 아 ssl 적용햇는데 개정신없네 9 넌또화나있네 0 1 일 전 223
5709 [프로그래밍] 패스트 캠퍼스 <---- 얘내는 가격 인상 원툴임? 5 조강현 0 4 일 전 316
5708 [프로그래밍] 클라가 파이썬 셀레니움같은거 써서 클릭하고 그러는걸 감지 ... 5 리옴므 0 5 일 전 216
5707 [프로그래밍] leetcode 50일 달성 1 JimmyMcGill 1 5 일 전 191
5706 [프로그래밍] 그냥 개인공부용 git 만들건데 5 년째재수강 0 5 일 전 279
5705 [프로그래밍] html 자바스크립트 질문 19 책걸이 0 6 일 전 320
5704 [프로그래밍] 아니 시바 이게 무슨일이야 4 인간지표 0 7 일 전 338
5703 [프로그래밍] 아두이노 키트 아무것도 모르고 사도 될까? 6 그것 0 7 일 전 266
5702 [프로그래밍] 횽들 Vimeo에 올라가있는 동영상의 원본크기를 확인할 수 있... 13 카뜨만두 0 7 일 전 190
5701 [프로그래밍] c# 이벤트와 델리게이트 13 RX7900XTX 0 9 일 전 309
5700 [프로그래밍] Aws 람다에 파이썬 올려서 결과 받아오는데 11 아르피쥐 0 11 일 전 353
5699 [프로그래밍] 마리아DB mediumtext 그냥 쓰고 싶은데 21 잉텔 0 12 일 전 226
5698 [프로그래밍] 안드로이드 씹뉴비 질문이요 2 집에가게해줘 0 12 일 전 132
5697 [프로그래밍] c언어 7년했는데 이런게 되는거 처음알았음.. 4 케로로중사 0 13 일 전 911
5696 [프로그래밍] 파이썬 1도 모르는데 GPT로 프로그램 뚝딱 만듬 2 푸르딩딩 1 16 일 전 762
5695 [프로그래밍] 담주 면접잡혔는데 8 삐라루꾸 0 17 일 전 509
5694 [프로그래밍] 아두이노 부트로더를 구웠는데.. 4 렙이말한다ㅡ니가옳다 0 17 일 전 240
5693 [프로그래밍] IOS 개발자 있나여? 1 g4eng 0 19 일 전 264
5692 [프로그래밍] 시스템 디자인 인터뷰 준비 도움좀!!! 1 Nognhyup 0 20 일 전 207