개발이야기/DataBase

이벤트 참여자 무작위 추첨

대머리개발자 2024. 2. 6. 15:53
728x90

 
기본적으로 DB를 통해서 처리할 수 있으면 그것이 가장 best practice일 듯 하다.
 
이벤트 대상자의 정보를 "비지니스 로직"으로 옮겨와 작업하게 되면
리소스(메모리)의 부하가 발생할 수 있다. 
 
이벤트 Size가 작은 경우는 크게 문제될 부분은 없을것 같지만 몇 십만명 단위라면....그런거 해보고싶당.
 
다행히도 MYSQL은 rand() 함수를 제공해 준다.
 
rand()함수는 0 ~ 1 사이의 유리수를 랜덤하게 출력해 준다.
출력된 값을 그대로 order by해서 줄을 세우면 된다.

 

딱 끝..고민없이 하면 되는데...
 
중복으로 참여한 사용자 위주로 추첨될 수 있도록 요청이 왔다.

 

전체 무작위로 뽑아도.. 참여를 더 많이 했으니 다른 사용자보단  (참여횟수) / (전체 대상자) 만큼의 확률이 올라간다.

그것으론 부족하다고 한다.

 
있는 그대로 "참여 횟수" 그대로 가중치를 부여하는 경우는.. 뭔가 형평성이 안 맞는것 같다.

기적 같은 행운도 있어야 하지 않겠나?

...
select participant.userId
, ((count(user.uid)) * RAND()) as win
, count(participant.userId) as number
, user.name
...

 

진짜 그래도 참여를 한 번 이라도 했으면 기회를 줘야 하는거 아닌가..... 

3번 미만 참여한 사람은 절대 추첨이 안 된다. ㅋㅋ

 

물론 당첨을 위해 많이 참여한 사람들 위주로 뽑아야 되는것은 맞는데;; 너무너무


10명 중 7명은 가중치 그대로  --> 열정 OK
10명 중 3명은 완전 랜덤으로  --> 기적 같은 행운도 OK
 

스미마셍!!

개발자는 힘이 없다 

 

 

 

 

 
 
 
 
 
 
 
 
 
 

728x90