DB transaction 관리.... 0 2 2,270

by pranludi [DB 기타] [2012.07.31 20:53:34]


안녕하세요 -

온라인 게임 서비스를 준비중입니다.
DB는 오라클을 사용하고
- 사용자 웹 1 ... n ( JDBC 연결 )
- 관리자 웹           ( JDBC 연결 )
- 게임 서버 1 ... n  ( ODBC 연결 )
- 통계 서버  ( Oracle Pro*C OCI 연결 )
으로 서비스 예정이고, 사용자 웹 / 관리자 웹 / 게임 서버 1 으로 내부 테스트를 하고 있습니다.

질문.
회원 포인트 경우, 사용자/관리자/게임서버에서 동시에 접근을 합니다.
경우에 따라선 3지점에서 동시에 포인트 테이블에 접근을 할 수도 있습니다.
포인트가 변경이 되면 로그를 남기면서 동시에 포인트 테이블을 수정할때 로그의 순서가 맞지 않은 경우가 발생합니다.

운영시에는 이런 경우가 발생하지 않도록 프로그램적으로 막겠지만, 테스트 할때 이런 경우가 발생하여
서버 파트 / 웹 파트 / DB 파트에서 논의 중인데 쉽게 의견이 좁혀지지 않네요.

이런 경우 어떤 방법 또는 구조로 처리를 하는게 좋을까요?
by 오케클릭 [2012.08.01 00:09:49]
두가지정도 대안이 생각나는데요
천번째는 락 테이블을 이용해서 가장빠르게 접근한 사람이 락테이블을 선점하면 다른쪽에선 대기를 타게하는거죠

두번째는 큐테이블 이용해서 요청 명령을 큐에 쌓도록하고 큐는 1초단위 스케줄잡으로 프로시저로 실행하는 방법입니다

두번째는 서버부하도 심할수 있으니 첫번째 방법 어때요?

by 손님 [2012.08.01 12:18:37]

select ~ for update 문으로 select에서 lock을 걸어주셔서 트랜잭션 처리해 주시는게 맞을듯 합니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입