2012-01-26 5 views
8

Мне интересно, могу ли я безопасно заменить идентификаторы, сгенерированные с помощью функции UUID() mysql с идентификаторами, сгенерированными функцией UUID.randomUUID() java?mysql UUID() и java UUID.randomUUID()

Я ищу разделить эти идентификаторы в адресах с моими пользователями, но MySQL UUID() вывод выглядит очень похож друг на друг после нескольких прогонов:

3ae2c9c4-47df-11e1-8c2a-a46b34c02a9e 
976de634-47e3-11e1-8c2a-a46b34c02a9e 
530cc5c6-47e7-11e1-8c2a-a46b34c02a9e 
... 

Я не говорю, что они» re не уникально, но так ли, как обычно появляются результаты UUID()? Я полагаю, что это связано с каким-то идентификатором на моей машине.

UUID.randomUUID в Java() «смотреть» более случайный характер:

c042437b-298a-41c4-c2b6-0f83552bdb8b 
e33d8ab7-d9d3-4ffe-a592-650a125d2a93 
ecb12c54-5741-45c8-8b85-1825c19a9cae 
... 

С моим наивным пониманием уникальности, идентификаторы, полученные с помощью метода Java должны работать как идеальная замена для UUID в MySQL()?

(еще один бонус для использования версии Java является то, что мне не придется повторно извлечь вставленную запись, которая использует UUID(), когда мне нужно предоставить его в ответ на клиента)

Спасибо вам

ответ

9

Вы используете Linux или FreeBSD? Из MySQL, documentation:

Пятое число является число IEEE 802 узел, который обеспечивает пространственное уникальность. Случайное число заменяется, если последнее не доступно (например, поскольку на главном компьютере нет платы Ethernet , или мы не знаем, как найти аппаратный адрес интерфейса в вашей операционной системе). В этом случае не может быть гарантирована пространственная уникальность . Тем не менее, столкновение должно иметь очень низкую вероятность .

В настоящее время MAC-адрес интерфейса учитывается только на FreeBSD и Linux. В других операционных системах MySQL использует произвольно созданное 48-битное число .

Также обратите внимание:

Предупреждение:

Хотя UUID() значения предназначены быть уникальными, они не являются обязательно неопределяемых или непредсказуемы. Если требуется непредсказуемость , значения UUID должны генерироваться другим способом.

EDIT

Если вы хотите, чтобы идентификаторы пользователей появляются более случайный, вы можете передать их с помощью функции хеширования, как MD5(UUID()), что дает более убедительное случайную строку

+1

Я на mac, и эта вещь будет запускаться на машине Windows в конечном итоге (...). Предчувствие для меня не проблема, учитывая шаблон, который я видел с mysql UUID() выше, я предполагаю, что мои пользователи просто подумают, что есть что-то «странное».На самом деле это не более того, но бонус, связанный с тем, что UUID перед входом во время вставки, сгенерированный с использованием java-метода, привлекает мою поддержку в этом направлении. благодаря – user291701

Смежные вопросы