wooyounggggg / database-internals

데이터베이스 인터널스를 읽고 공유합니다.
0 stars 0 forks source link

[question] 동시성 이슈와 lock 관리 #16

Closed wooyounggggg closed 1 year ago

wooyounggggg commented 1 year ago

질문

동시성 이슈를 방지하기 위해, Pessimistic Lock을 사용하고 있고 lock store로 db 테이블을 사용하고 있습니다. 그리고 이를 관리하는 LockService를 application내에서 구현하여 일관된 방식으로 사용하고 있습니다.

다른 분들은 어떠한 방식으로 lock을 관리하고, 동시성 이슈를 방지하시는지 궁금합니다!

연관 챕터

14

seonWKim commented 1 year ago

제 경우 lock을 다음과 같이 관리하고 있습니다.

wooyounggggg commented 1 year ago

@seonwoo960000 저도 2번째 방식을 사용하고 있습니다.

레디스 분산락은 들어보기만 하고 써보진 않았는데, 혹시 어떤 장단이 있는지 궁금하네요 ㅎㅎ 다음 주에 이 이슈도 언급드리겠습니다 😄

seonWKim commented 1 year ago

소견으로 Redis의 분산 락 경우에는 락을 획득함으로써 발생하는 부하를 데이터베이스로부터 덜 수 있다는 점이라고 생각합니다. 다만 속도면에서는 무엇이 빠른지 테스트해봐야할 것 같네요.

gracefulife commented 1 year ago

select for update 에 의해 발생하는 락 경합은, index(row) 수준으로 경합이 발생할텐데요, redis 를 사용하면 기능 기준으로 경합하도록 분할시킬 수 있네요.

기능 기준으로 서로 겹치는 데이터를 수정하지 않는다면 데이터 무결성을 엄격히 지키면서 경합은 줄일 수 있습니다.