프로그래밍

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
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180912 [모바일] 이런 충전기 있을까? cw 7 0 1 분 전 4
180911 [컴퓨터] 2070s 에서 rx6800 업글 할만한가요?? 3 나니니오우 0 48 분 전 26
180910 [잡담] 고스트 오브 쓰시마 amd 최적화 장난 아니네 8 Nei 0 57 분 전 46
180909 [컴퓨터] 당근에서 중고컴 샀는데 모니터가 안 켜짐.. 4 IlIllllIlllI 0 1 시간 전 35
180908 [컴퓨터] Rtx4060아수스 글카 이거 샀는데 어떰? 1 광어우럭따 0 2 시간 전 53
180907 [컴퓨터] 40인치모니터에 모니터암을 처음 달아보려고 하는데. 11 파라다이스 0 4 시간 전 114
180906 [컴퓨터] 아파트가 고층이면 유선인터넷에 영향이 있나? 8 마리의붕어싸만코 0 4 시간 전 99
180905 [컴퓨터] gpu 드라이버 재시작 오류.. 하림보 0 4 시간 전 59
180904 [컴퓨터] 지프로 더블클릭 개빡쵸... 4 레벨더높아너보다 0 5 시간 전 75
180903 [잡담] 중고본체 15 정도면 팔림? 사양은 내용에 7 zpqls 0 6 시간 전 116
180902 [컴퓨터] 컴터살까..? 3 숨겨왔던너의 0 6 시간 전 62
180901 [컴퓨터] LG27GP850 모니터암 추천좀요 1 초아 0 8 시간 전 83
180900 [컴퓨터] 라데온 rx6800 어떰??? 11 나니니오우 0 9 시간 전 164
180899 [모바일] 안녕하세요 개붕이님들 핸드폰 기변병이 왔습니다.. 1 원조할머니딸기민... 0 9 시간 전 70
180898 [잡담] 안냐세요! 창문형 에어컨 물어보려 왔어요 22 달달한커피 0 10 시간 전 170
180897 [정보] 크롬 탭검색 없애기(2023 ui 되돌리기) oipddgr 0 10 시간 전 139
180896 [컴퓨터] 견적 이정도면 가능함? 14 샤아아즈나블 0 10 시간 전 98
180895 [잡담] 형들 3600 > 5700x3d 체감 많이 될까 21 정상에서만납시다 0 11 시간 전 163
180894 [잡담] 황발놈이 1년주기로 gpu낸다던데 3 Gargantua 0 12 시간 전 141
180893 [잡담] 갤탭s9 fe+ 가격 괜찮음? 5 좃같은건못참음 0 12 시간 전 118