2012-01-26 4 views
8

mysql의 UUID() 함수로 생성 된 ID를 java의 UUID.randomUUID() 함수에 의해 생성 된 ID로 안전하게 대체 할 수 있는지 궁금합니다.mysql UUID()와 java UUID.randomUUID()

내 사용자와 URL을 이러한 ID를 공유 할 수 찾고 있어요,하지만 MySQL의 UUID()가 출력이 몇 실행 후 서로 매우 비슷합니다

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

나는 그들이 말하는 게 아니에요 고유하지는 않지만 UUID()의 결과가 일반적으로 나타나는 이유는 무엇입니까? 내 컴퓨터의 식별자에 묶여 있다고 가정합니다.

자바의 UUID.randomUUID() 더 무작위 "모양"

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

을 고유성 내 순진 이해에서 자바 방법에 의해 생성 된 ID는) (MySQL의의 UUID에 대한 완벽한 대체 일을해야합니까?

당신에게

감사 (자바의 버전을 사용하는 또 다른 보너스는 내가 UUID를() 나는 클라이언트에 대한 응답에 제공 할 필요가있을 때 사용하는 삽입 기록을 다시 가져올 필요가 없습니다 것입니다)

답변

9

Linux 또는 FreeBSD를 사용하고 있습니까? documentation MySQL의 년대 :

다섯 번째 번호는 공간 고유성을 제공하는 IEEE 802 노드의 수이다. 호스트 컴퓨터에 이더넷 카드가 없거나 운영 체제에서 인터페이스의 하드웨어 주소를 찾는 방법을 모르기 때문에 난수를 으로 사용할 수없는 경우 임의 번호가 대체됩니다. 이 경우 공간 고유성 을 보장 할 수 없습니다. 그럼에도 불구하고, 충돌은 매우 낮은 확률이어야합니다.

현재 인터페이스의 MAC 주소는 FreeBSD 및 Linux에서만 입니다. 다른 운영 체제에서 MySQL은 임의로 생성 된 48 비트 번호 을 사용합니다.

또한주의 :

경고 :

UUID() 값이 고유하도록되어 있지만, 그들은 반드시 추측 할 수없는 또는 예측할 수 없습니다. 예측 불가능 성이 인 경우 UUID 값을 다른 방법으로 생성해야합니다.

편집

더 무작위, 당신은

+1

난에있어 좀 더 설득력있는 임의의 문자열을 제공 MD5(UUID()) 같은 해시 함수를 통해 전달할 수 있습니다 표시하려면 사용자 ID를 원하는 경우 맥, 그리고이 일은 결국 윈도우 머신에서 돌릴거야. (...). 추측 성은 나에게 문제가되지 않는다. 위의 mysql UUID()에서 보았던 패턴을 고려할 때, 내 사용자는 단순히 "이상한"것이 있다고 생각할 것이라고 추측한다.실제로 그 이상은 아니지만, 자바 메소드를 사용하여 생성 된 경우 삽입 시간에 UUID를 사용하는 보너스는 그 방향으로 내 호의를 베풀고 있습니다. 감사 – user291701