정보를 수정하거나 추가/삭제하는 것이 모든 레코드에 대한 것이 아니지 않나요?
클라이언트로 부터 받는 정보 수정 요청은 임시(temporary) 레코드로 저장해 놓고 차근 차근 원래 레코드에 통합(merge)한다고 생각해 보세요.
유저 정보 수정 시작
____create temporary record block
____save user request to the created temporary record block
____sanity check of the saved record block
____wait mutex on the main record
____merge (add/modify/delete) the user action to main record
____release mutex
유저 정보 수정 끝
그리고 항상 서버와 변경 사항을 실시간으로 동기화할 필요가 없죠. 서버로부터 정보를 가져올 때 그때 업데이트가 된게 있으면 가져오면 됩니다. 상용급 프로그램에서는 변경 사항만 가져오겠지만 지금 그렇게 하기는 어렵겠죠. 대역폭을 좀 차지하고 서버에 부담이 되어도 일단은 전체 레코드를 가져오게 하고 차차 업데이트 해 나가면 될 것으로 보입니다.
(1) A 회원의 회원 정보 요청: A 회원의 정보 + 현재 버전을 가져온다
(2) 클라이언트에서 수정
(3) 서버에 업데이트: 서버에서 DB에 update 명령을 내리면서 현재 버전을 1 증가. 만약 버전이 아까 알던 버전과 다르면 누군가 이미 업데이트를 했다는 뜻이므로 업데이트 실패.
그래서 kldp에서 뭘 어떻게 했으면 좋겠습니까?
그래서 kldp에서 뭘 어떻게 했으면 좋겠습니까?
개인 메모장에 쓸 글을 여러 사람 보는 게시판에 쓰신 것 같아서요.
세벌 https://sebuls.blogspot.kr/
이야기는 풀었으니
결과를 알려드려야 될거 같아서 적었는데 일기 같았다면 죄송합니다.
누군가가 열심히 1초에 한번씩 '정보 수정'을 하면,
누군가가 열심히 1초에 한번씩 '정보 수정'을 하면,
다른 사람들은 실질적으로 데이터 수정이 어렵겠군요.
1초마다 다시 받아와서 입력하던 데이터를 잃어버리니...
암튼, 결론은... 적당선으로 결정해야죠.
안그래도 정보 수정중에 누가 먼저 수정하면 수정하던거 날아가는 문제에 대해 생각하고 있었습니다..
어떻게 개선해야 될지
정보 수정은 실시간으로 업데이트 되야 하는건 맞는거 같고.
수정은 첫번째로 들어온 사람만 가능하게 하는게 맞을까요?
사람 나갈때마다 수정권한 다음사람에게 넘기는 식?
그러고 보니 연속 수정 시간에 대해도 제한을 두어야 겠네요.
생각해볼수록 어려운거 같네요.
생각해볼수록 어려운거 같네요.
경험 많으신 분들께서 조언을 해주시면 감사하겠네요.
정보를 수정하거나 추가/삭제하는 것이 모든 레코드에
정보를 수정하거나 추가/삭제하는 것이 모든 레코드에 대한 것이 아니지 않나요?
클라이언트로 부터 받는 정보 수정 요청은 임시(temporary) 레코드로 저장해 놓고 차근 차근 원래 레코드에 통합(merge)한다고 생각해 보세요.
유저 정보 수정 시작
____create temporary record block
____save user request to the created temporary record block
____sanity check of the saved record block
____wait mutex on the main record
____merge (add/modify/delete) the user action to main record
____release mutex
유저 정보 수정 끝
그리고 항상 서버와 변경 사항을 실시간으로 동기화할 필요가 없죠. 서버로부터 정보를 가져올 때 그때 업데이트가 된게 있으면 가져오면 됩니다. 상용급 프로그램에서는 변경 사항만 가져오겠지만 지금 그렇게 하기는 어렵겠죠. 대역폭을 좀 차지하고 서버에 부담이 되어도 일단은 전체 레코드를 가져오게 하고 차차 업데이트 해 나가면 될 것으로 보입니다.
...
일반적으로 한번에 한 명의 회원 정보를 수정하지 않나요? 그러면
(1) A 회원의 회원 정보 요청: A 회원의 정보 + 현재 버전을 가져온다
(2) 클라이언트에서 수정
(3) 서버에 업데이트: 서버에서 DB에 update 명령을 내리면서 현재 버전을 1 증가. 만약 버전이 아까 알던 버전과 다르면 누군가 이미 업데이트를 했다는 뜻이므로 업데이트 실패.
...뭐 보통 이런 식으로 하는 게 정석(?)이죠.