2014-10-30 2 views
0

나는 꽤 (가능한 한) 무작위로 사람을 팀에 할당해야하는 아주 간단한 응용 프로그램을 가지고 있습니다.활성 레코드가 true로 무작위입니까?

현재로서는 몇 가지 다른 방법으로 반복하고 있습니다.

arr.sample().inspect 

하지만, 이것들은 진정한 랜덤으로 나타나지 않는

Team.where(assigned: false).order("RANDOM()").first 

뿐만 아니라 어레이에로드하고 사용하여 샘플()들은 일반적으로 에지 (1,2두고 .. 8,9, 여기서 count = 10) 마지막까지. AR을 포함하거나 포함하지 않는 더 나은 방법이 있습니까? PSQL rand와 sqlite3 random() 사이에 수학적으로 눈에 띄는 차이가 있습니까?

상기 임의의 분포를 생성하는 루프에 대한 도움을 주시면 감사하겠습니다!

+0

샘플은 항상 제 편이었습니다.이 작업을 수십억 번 시도하고 각 오브젝트가 몇 번 선택 되었습니까? –

+1

@williamthomas 오프셋을 사용하여 임의의 값을 선택할 수 있습니다.이 링크를 확인하십시오 : http://stackoverflow.com/questions/2752231/random-record-in-activerecord – anusha

+0

그래, "괜찮아 보인다" . 캐싱에 영향이 있는지 확실하지 않습니다. – williamthomas

답변

0

임의의 숫자를 생성하여 레코드를 선택하는 방법이 더 많을 수 있지만 (예 : random.org과 같은 극단적 인 수치 일지라도) 사용자가 제공 한 임의의 선택 사항은 충분하거나 그다지 차이가없는 것으로 입증되어야합니다.

만약 내가 당신이라면 두 사람 사이의 오버 헤드 차이를 알 수 있습니다. 하나는 데이터베이스에서 하나의 레코드 만 선택하고 다른 하나는 모든 레코드를 메모리로 가져 와서 무작위로 하나를 선택합니다. Team 테이블이 커지면 전체 계산 속도가 느려지는 메모리 및 계산 유출로 이어질 수 있습니다. 두 번째 방법은 다른 목적으로 전체 테이블을 메모리에 필요로 할 때만 사용합니다.

관련 문제