Обеспечение уникальных полей при случайной генерации строк MySQL - PullRequest
0 голосов
/ 19 сентября 2011

Я генерирую около 100 000 строк случайных данных с 10 столбцами, и мне нужно, чтобы все значения были уникальными.

Единственный надежный способ сделать это - сделать запрос к каждому случайному поколению, чтобы убедиться, что он еще не существует, но он добавляет сотни тысяч запросов. Другой альтернативой было бы создание уникального ограничения для таблицы, но тогда мне нужно было бы каким-то образом подсчитать, сколько дубликатов вышло из строя, чтобы я мог воссоздать эти строки (мне нужно знать, что я буду генерировать ровно столько же случайных строк как указано), или наличие чего-то, что повторяется с новым поколением, когда эта вставка завершается неудачно. Есть способ сделать это? Или я скучаю по какому-то другому подходу?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Я должен генерировать случайные числа в Python, в списке. Затем используйте set для получения уникальных символов.

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

set(l)

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

Теперь вы можете сгенерировать 200 000 чисел, чтобы получить не менее 100 000 уникальных, и сократить список или около того.


Я пробовал это:

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

и это дало мне набор длины 200.000. В сгенерированной случайности не было никаких дуплей!

0 голосов
/ 19 сентября 2011

Какими данными вы заполняете столбцы?Должен ли он соответствовать какому-либо конкретному формату?

Независимо от формата данных, я сгенерирую все данные в автономном режиме, а затем сразу вставлю их в БД.

Например:

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

Таким образом, вы знаете, что все строки будут уникальными, и случайное перемешивание сделает порядок (более) случайным.

...