私たちは8000万行のDBにUUID列を追加し、デフォルトはpostgres uuid_generate_v4()
関数を使用して生成されます。postgresを使用すると重複した値uuid_generate_v4
私たちは、このスクリプトを使用してUUIDを埋め戻す:
current = 1
batch_size = 1000
last_id = 80000000
while current < last_id
start_id = current
end_id = current + batch_size
puts "WORKING ON current: #{current}"
ActiveRecord::Base.connection.execute <<-SQL.squish
UPDATE table_name
SET public_id = uuid_generate_v4()
WHERE id BETWEEN '#{start_id}' and '#{end_id}' AND public_id IS NULL
SQL
current = end_id + 1
end
しかし、スクリプトの最後に、我々はいくつかのもこれが可能であるどのように3を持って、我々は135の重複を持っていたことが分かりましたか? uuid_generate_v4()
関数はそのような高い確率でダッシュを生成しますか?
あなたのホストでhttps://linux.die.net/man/3/uuid_generate_randomをチェックする価値があります –
あなたの乱数ソースを疑います。 http://ralphbecket.blogspot.com.au/2011/09/birthday-paradox-and-guid-collisions.html –