충돌 가능성이 약간 있음을 알고 있지만 1000 개의 GUID (예 :)의 일괄 처리를 생성 한 경우 각각 테스트를 저장하는 것이 모두 고유하다고 가정하는 것이 안전할까요?
보너스 질문
GUID의 고유성을 테스트하는 최적의 방법은 무엇입니까? 블룸 필터일까요?
답변
그래 넌 할수있어. GUID의 길이는 128 비트이므로 충돌이 발생할 가능성은 몇 분이지만 “분”이라는 단어는 충분히 강하지 않습니다. GUID 가 너무 많아서 무작위로 수조 개 를 생성 하면 한 번의 충돌도 발생하는 것보다 운석에 맞을 가능성이 더 높습니다 ( Wikipedia ). 그리고 당신은 무작위로 생성되지 않지만, 경우 예 MAC 주소는 컴퓨터와 타임 스탬프들 고유의 고유 한대로 그들은 또한, 고유 겁니다는 MAC 주소 – 및 – 타임 스탬프 알고리즘을 사용 하여 컴퓨터.
편집 1 : 보너스 질문에 답하기 위해 GUID 세트의 고유성을 테스트하는 최적의 방법은 모두 고유하다고 가정하는 것입니다. 왜? 생성하는 GUID의 수를 감안할 때 GUID 충돌 확률은 컴퓨터 메모리에서 우주 광선이 약간 뒤집히고 원하는 “정확한”알고리즘이 제공하는 답을 망칠 확률보다 작기 때문입니다. 실행합니다. ( 수학에 대해서는 이 StackOverflow 답변 을 참조하십시오 .)
거기에는 엄청난 수의 GUID가 있습니다. 더글러스 아담스의 은하계에 대한 히치하이커 가이드 를 인용하려면 :
“공간”은 “크다. 정말 큽니다. 얼마나 엄청나게 큰지 믿기지 않을 것입니다. 화학자에게가는 길이 멀다고 생각할 수도 있습니다.하지만 그것은 우주로가는 땅콩입니다.” , 들어 봐… “
이 때문에 그리고 7 × (10)에 대해 22 우주의 별 , 그리고 바로 아래 2 128 GUID를, 다음 4.86 × 10 정도가 15 – 지하 오 천조의 모든 단일 스타 -GUIDs는. 그 별들 모두가 우리처럼 번성하는 인구를 가진 세계를 가지고 있다면, 모든 별 주위에서 살았던 모든 인간이나 외계인은 4 만 5 천 개 이상의 GUID를받을 자격이있을 것입니다. 우주의 모든 별의 역사상 모든 사람을 위해. GUID 공간은 전체 우주의 크기와 동일한 수준입니다. 당신은 할 수 없습니다 걱정할 필요.
( 편집 2 : 이것에 대해 반성 : 와우. 나는 이것이 무엇을 의미하는지 스스로 깨닫지 못했습니다 . GUID 공간은 이해할 수 없을 정도로 방대합니다. 나는 약간 경외심을 느낍니다.)
답변
짧은 대답 : 예, 실용적인 목적입니다.
그러나 생일 역설을 고려해야합니다!
몇 가지 대표적인 충돌 확률을 계산했습니다. Wikipedia 기사에 지정된대로 122 비트 UUID를 사용 하는 경우 2.71492e18
UUID 를 최소한 생성하면 충돌 확률은 1/2 입니다. 10 ^ 19 UUID에서 확률은 0.999918입니다. 10 ^ 17 UUID 사용시 0.000939953.
비교를위한 일부 숫자는 Wikipedia에서 찾을 수 있습니다. 따라서 살았던 각 인간, 관측 가능한 우주의 각 은하, 바다의 각 물고기, 지구상의 각 개미에 대해 UUID를 안전하게 할당 할 수 있습니다. 그러나 인류가 1 년 동안 생성하는 각 트랜지스터, 지구상의 각 곤충, 지구상의 각 모래 알갱이, 관측 가능한 우주의 각 별 또는 더 큰 모든 것에 대해 UUID를 생성하면 충돌이 거의 확실합니다.
초당 10 억 UUID를 생성하면 약 36 년이 걸립니다. 10 %의 충돌 확률을 얻는 .
결국 인류 역사 과정에서 생성 된 일련의 UUID간에 충돌이있을 것입니다. 그래도 충돌 된 UUID가 같은 목적으로 사용될 확률은 매우 적기 때문에 실제로는 문제가 없습니다.
답변
충돌 가능성에 대한 분석은 Wikipedia에서 확인할 수 있습니다. http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates
링크에서 언급했듯이 이것은 난수 생성기의 속성에 영향을받습니다.
GUID 생성기 코드에 버그가있을 가능성도 있습니다. 가능성은 낮지 만 수학에 근거한 충돌 가능성보다 높을 것입니다.
Bloom 필터가 적절할 수 있습니다. GUID가 고유한지 신속하게 알려줄 수 있지만 충돌을 잘못 표시 할 가능성이 있습니다. 한 번에 배치를 테스트하는 경우 다른 방법은 배치를 정렬하고 각 연속 요소를 비교하는 것입니다.
답변
일반적으로 그렇다고 가정하는 것이 안전합니다.
GUID 생성기가 실제로 무작위 인 경우 1000 개의 GUID 내에서 충돌 가능성이 매우 적습니다.
물론 그것은 좋은 GUID 생성기를 가정합니다. 그래서 질문은 실제로 GUID를 생성하는 데 사용하는 도구를 얼마나 신뢰하고 자체 테스트가 있습니까?