2013-04-27 4 views
1

나는 고유 난수를 생성하고 데이터베이스에 저장할 응용 프로그램을 작성 중입니다. HTTP 요청을 통해 숫자가 있는지 확인합니다. 처음에는 시작하기 위해 약 10,000 개의 숫자를 사용했습니다.데이터베이스에 임의의 숫자를 저장하는 올바른 방법은 무엇입니까?

이 방법이 맞습니까?

  1. 난수를 생성하고 하나씩 배열에 저장 한 다음 배열 고유성을 계속 확인하고 배열이 완료되면 정렬 후 데이터베이스에 전체 배열을 저장합니다.
  2. 데이터베이스를 사용하고 숫자가 있는지 확인하십시오.

최대 100 만 개의 응용 프로그램으로 확장 할 수 있으므로 어떤 데이터베이스를 사용해야합니까?

답변

1

그것은 그 모델/데이터베이스 중복을 방지하기에 시간과 사용을 검증 하나를 만들기 위해, 당신은 1000000 개 번호를 생성 할 경우 특히 더 효율적으로 할 수있다.

데이터베이스 선택과 관련하여 응용 프로그램에 약간의 영향을 미칩니다. 내가 그 일을하지 않았기 때문에 레일없이 루비에서 직접 데이터베이스를 사용하여 언급 할 수 Which is the Best database for Rails application?

: 여기에 몇 가지 정보가있다. 나에게 가장 큰 장점 중 하나는 데이터베이스를 사용하는 앱을 만드는 것이 얼마나 쉬운지다.

+0

그러면 데이터베이스를 정렬하면 검색 속도가 빨라집니다. –

+0

정렬 할 열에 인덱스를 추가하십시오. –

+0

이 데이터베이스는 어떤 이유로 좋을까요? –

1

몇 가지 생각 :

  1. 은 10 만 "임의의"번호를 저장하는 경우, 그것은 그들이 데이터베이스에 가고, 또는 임의인지 어떤 차이가 않습니다 데이터베이스는 무작위로 한 수를 선택합니다 경우 10,000 개의 연속 번호 범위? 이중 임의 번호 선택이 필요합니까? MySQL, PostgreSQL 및 다른 DBM은 난수를 생성 할 수 있으며 난수 생성기를 사용하여 행을 검색 할 수 있으므로 생성기에서 직접 값을 반환하거나 행을 가져올 수 있습니다. 어느 쪽이든, 루비가 무작위 값을 생성하는 것에 대해 걱정할 필요가 없습니다. - 실제로 "트리플"- 무작위 수를 원하지 않는 한. 그냥 (1..10_000) 범위의 값을 데이터베이스에 저장하고 해당 부분을 호출하여 레코드를 무작위로 가져 오기 위해 쿼리 작업을 수행합니다.
  2. 진정한 난수를 원하면 고유성을 보장 할 수 없습니다. 가상 랜덤에 만족하면 이전에 특정 세션에서 사용했던 번호를 추적하지 않으면 범위 내에서 중복 된 결과를 얻을 수 있기 때문에 여전히 문제가 있습니다. 일련의 세션에서 고유성을 추적하는 방법은 사이트가 인기를 얻으면 흥미로운 문제가 될 것입니다. 나는이 일을 한 경우

, 나는 과정의 일부를 역 것입니다. 데이터베이스에 "임의"값을 저장하지 않고 Ruby의 built-in random number generator을 사용하고 데이터베이스를 검사하여 이전에 특정 세션에 해당 번호가 생성되었는지 확인합니다. 전반적으로 데이터베이스에 저장되는 값은 더 적으므로 고유성을 결정하기위한 찾아보기가 더 빨리 수행됩니다. 여전히 코드에 어색한 시스템이 될 것입니다 및 세션의 "독특한"기록이 성장함에 따라 시간이 지남에 따라 비효율적 성장할 것

.

데이터베이스없이 이것을 수행하려면 임의의/고유 한 범위를 다음과 같이 작성하십시오. array = (1..10_000).to_a.shuffle, 값이 필요할 때마다 pop을 사용하여 임의의 배열에서 마지막 값을 가져옵니다. 나는 그것이 고갈 될 때까지 모든 세션에 대해 그 가치 풀을 끌어 내려고 유혹을 받았다.그 시점에서 "고유 한"값이 중복 될 가능성이 있지만 동일한 번호가 두 번 반복해서 나타납니다.

관련 문제