2011-09-19 8 views
0

약 10 개의 열이있는 약 100,000 개의 임의의 데이터 행을 생성하고 있으며 고유 한 값을 모두 가져야합니다.무작위로 MySQL 행을 생성 할 때 고유 한 필드 보장

내가 이것을 할 수있는 단 한 가지 방법은 각각의 무작위 세대가 아직 존재하지 않는다는 것을 확인하기 위해 쿼리를 수행하는 것이지만 수십만 개의 쿼리가 추가된다는 것입니다. 다른 대안은 테이블에 UNIQUE 제약 조건을 만드는 것입니다. 그렇지만 몇 개의 중복이 실패했는지 계산할 방법이 필요합니다. 따라서 해당 행을 다시 만들 수 있습니다. (나는 무작위로 많은 행을 생성한다는 것을 알아야합니다. 삽입이 실패 할 때 새로운 세대로 다시 시도하는 무언가를 갖는 것입니다. 그렇게 할 수있는 방법이 있습니까? 아니면 내가 함께 다른 접근 방식을 놓치고 있습니까?

+0

어떻게 임의의 값을 생성합니까? 데이터 유형? – gbn

답변

2

저는 목록에서 파이썬으로 난수를 생성해야합니다. 그런 다음 set을 사용하여 고유 항목을 가져옵니다.

l = [1,5,5,4,5,4,8,9,2] 

set(l) 

set([1, 2, 4, 5, 8, 9]) 

지금, 당신은 적어도 100.000 독특한 것들을 얻을 200.000 번호를 생성 할 수 있으며, 목록을 절단, 또는 이렇게.


나는이 시도 :

import random 
l = [] 
for i in range (200000): 
    l.append (random.random()) 
print len(set(l)) 

을 그리고 그것은 나에게 길이 200.000 세트를 주었다. 생성 된 무작위 내에서 중복이 없었습니다!

+0

이것이 최상의 솔루션 일 것 같습니다. 여분의 숫자를 생성해야하는 것은 특히 2x (cols 수)를 생성해야하기 때문에 실제로 고통스럽습니다. 또는 거기에 abouts가 있습니다. 10mile의 경우 2mil입니다. – lightstrike

+0

테스트로 내 대답을 편집했습니다. – Louis

0

어떤 종류의 데이터를 열로 채우고 있습니까? 특정 형식을 따라야합니까?

데이터 형식에 관계없이 모든 데이터를 오프라인으로 생성 한 다음 DB에 한꺼번에 삽입합니다. 예를 들어

:

from base64 import b64encode 
from random import shuffle 

arr=[] 
for i in range(0,1000000): #Assuming you need 1mil entries 
    arr.append(b64encode(str(i))) 
shuffle(arr) 
#Add arr[] to the database 

모든 문자열은 고유하며, 셔플은 순서가 (더) 무작위로 만들 것이라는 점을 알고있다 이런 식으로.