我生成了大約10萬行隨機數據的行,大約有10列,我需要讓所有值都是唯一的。隨機生成MySQL行時確保唯一字段
我能想到的唯一可行的方法就是對每個隨機生成一個查詢,以確保它不存在,但增加了數十萬個查詢。另一種方法是在表上創建一個UNIQUE約束,但是我需要有一些方法來計算有多少重複失敗,這樣我就可以重新創建這些行(我需要知道我將生成的行數完全是隨機的如指定的那樣),或者在插入失敗時讓新一代重試。有沒有辦法做到這一點?還是我錯過了其他一些方法呢?
我生成了大約10萬行隨機數據的行,大約有10列,我需要讓所有值都是唯一的。隨機生成MySQL行時確保唯一字段
我能想到的唯一可行的方法就是對每個隨機生成一個查詢,以確保它不存在,但增加了數十萬個查詢。另一種方法是在表上創建一個UNIQUE約束,但是我需要有一些方法來計算有多少重複失敗,這樣我就可以重新創建這些行(我需要知道我將生成的行數完全是隨機的如指定的那樣),或者在插入失敗時讓新一代重試。有沒有辦法做到這一點?還是我錯過了其他一些方法呢?
我應該在列表中生成隨機數。 然後,使用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的。生成的隨機內沒有任何嘟!!
這似乎可能是最好的解決方案。需要生成額外的數字是一個真正的痛苦,尤其是因爲我不得不生成2 x(cols數) - 或者那裏大約,10 mil將是2mil。 – lightstrike
我已經通過測試編輯了我的答案。 – Louis
你在填寫什麼樣的數據?它是否必須遵循任何特定的格式?
無論數據格式如何,我都會離線生成所有數據,然後一次將其全部插入數據庫。
例如:
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
你知道,所有的字符串將是唯一的,洗牌將使得順序(更多)隨機這種方式。
你怎麼生成隨機值?數據類型? – gbn