개발 Q&A

제목 php알고리즘(?)문의 - 먼저 선택한 사람을 매칭
카테고리 PHP
글쓴이 neo천 작성시각 2017/02/17 12:11:50
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 11941   RSS

다들 안녕하신지요! 새해도 벌써 2월중순이나 되었습니다. 시간이 무척 빠르군요 ㅠㅠㅠㅠㅠ

 

제가 포럼에 계신 분들의 지식을 도움받고 싶어서 이렇게 문의드립니다.

 

정확하게 용어를 몰라서 머라고 표현해야할지 몰라서...일단 설명하겠습니다

 

과정

1. a,b,c,d 클라이언트에서 php서버로 데이터('내가하겠다')를 전송합니다

2.php는 a,b,c,d 중에 제일 빨리 데이터('내가하겠다')를 전송한 녀석만 db-테이블-필드에 '해당 클라이언트'를 업데이트 합니다.

 

제가 생각한 방법은, 알고리즘은

1.db-테이블에 데이터가 비었는지 확인한다.

2.비었다면 db-테이블-필드에 '클라이언트'를 업데이트

 

궁금한점

제가 생각한 방법처럼 할때

a,b,c,d클라이언트 4명(실제클라이언트는 엄청 많겟죵)이 정말 근소한 차이로  제 알고리즘을 수행할때

1번과정을 동시에 수행해 버리면, 조금이라도(0.0000000001) 늦게 데이터를 보낸 클라이언트가 업데이트 되지 않을까합니다.

 

 

1. 제가 생각한 부분이 맞는지, 아니면 그럴일이 없는지 궁금하구용..

2.만약 제가 생각한 부분이 맞다면 어떻게 처리하는게 좋을까요 ㅠㅠ

 

좋은 피드백, 정보 참고자료 부탁드리겠습니다!!

 

긴글 읽어주셔서 항상 감사하고, 주말 잘보내십시오! 

 

 

 

 다음글 ci에서 이니시스 모바일 결제모듈 에러.. 도와주세요 (5)
 이전글 아이디 저장 및 자동로그인에 대해서 질문합니다. (4)

댓글

박쥐 / 2017/02/17 12:26:56 / 추천 0

column이 비어있는 상태에서 가장 먼저 호출 한 사람이 update를 하고,

그 이후 column이 비어있지 않다면 update를 할 수 없게 하면 되는 것인가요?

 

해당 row를 lock을 걸고, update 조건 문에 해당 column이 비어있는지를 추가하면 

update를 할 때 2순위 이후의 클라이언트는 예외가 발생하고 1순위 자의 쿼리가 실행 되는 동안에는

lock이 걸려서 2순위자 이후의 클라이언트는 실행이 대기되서 중복의 문제가 없을 거 같습니다.

 

배강민 / 2017/02/17 12:55:32 / 추천 0

트랜젝션은 select의 시간차공격이면 안되니, 일반적으로는(?)

DB마다 다르지만, 오라클이라면 merge로 없으면 insert, 있으면 다른행위를 할 수있겠고

MySQL이라면 insert 시에 exists나 ignore절을 사용할 수 있겠고요.

replication이 되어있다면 주의가 필요할 수도 있고요.

더욱 완벽하고, 위 행위의 관리까지 하고 싶으면, 좋은건 큐방식을 이용하여 어딘가에 적재하고, 별로 batch성 로직이 처리하면 좋긴합니다.

neo천 / 2017/02/17 17:56:38 / 추천 0
박쥐님 , 배강민님 답변감사합니다 ㅎㅎ