몇 가지 생각 :
- 은 10 만 "임의의"번호를 저장하는 경우, 그것은 그들이 데이터베이스에 가고, 또는 임의인지 어떤 차이가 않습니다 데이터베이스는 무작위로 한 수를 선택합니다 경우 10,000 개의 연속 번호 범위? 이중 임의 번호 선택이 필요합니까? MySQL, PostgreSQL 및 다른 DBM은 난수를 생성 할 수 있으며 난수 생성기를 사용하여 행을 검색 할 수 있으므로 생성기에서 직접 값을 반환하거나 행을 가져올 수 있습니다. 어느 쪽이든, 루비가 무작위 값을 생성하는 것에 대해 걱정할 필요가 없습니다. - 실제로 "트리플"- 무작위 수를 원하지 않는 한. 그냥
(1..10_000)
범위의 값을 데이터베이스에 저장하고 해당 부분을 호출하여 레코드를 무작위로 가져 오기 위해 쿼리 작업을 수행합니다.
- 진정한 난수를 원하면 고유성을 보장 할 수 없습니다. 가상 랜덤에 만족하면 이전에 특정 세션에서 사용했던 번호를 추적하지 않으면 범위 내에서 중복 된 결과를 얻을 수 있기 때문에 여전히 문제가 있습니다. 일련의 세션에서 고유성을 추적하는 방법은 사이트가 인기를 얻으면 흥미로운 문제가 될 것입니다. 나는이 일을 한 경우
, 나는 과정의 일부를 역 것입니다. 데이터베이스에 "임의"값을 저장하지 않고 Ruby의 built-in random number generator을 사용하고 데이터베이스를 검사하여 이전에 특정 세션에 해당 번호가 생성되었는지 확인합니다. 전반적으로 데이터베이스에 저장되는 값은 더 적으므로 고유성을 결정하기위한 찾아보기가 더 빨리 수행됩니다. 여전히 코드에 어색한 시스템이 될 것입니다 및 세션의 "독특한"기록이 성장함에 따라 시간이 지남에 따라 비효율적 성장할 것
.
데이터베이스없이 이것을 수행하려면 임의의/고유 한 범위를 다음과 같이 작성하십시오. array = (1..10_000).to_a.shuffle
, 값이 필요할 때마다 pop
을 사용하여 임의의 배열에서 마지막 값을 가져옵니다. 나는 그것이 고갈 될 때까지 모든 세션에 대해 그 가치 풀을 끌어 내려고 유혹을 받았다.그 시점에서 "고유 한"값이 중복 될 가능성이 있지만 동일한 번호가 두 번 반복해서 나타납니다.
그러면 데이터베이스를 정렬하면 검색 속도가 빨라집니다. –
정렬 할 열에 인덱스를 추가하십시오. –
이 데이터베이스는 어떤 이유로 좋을까요? –