Programming

GUID가 항상 고유하다고 가정해도 안전합니까?

procodes 2020. 7. 29. 21:37
반응형

GUID가 항상 고유하다고 가정해도 안전합니까?


충돌이 발생할 가능성이 있음을 알고 있지만 1000 개의 GUID 배치를 생성 한 경우 (예를 들어) 각각의 테스트를 저장하는 것이 독특하다고 가정해도 안전합니까?

보너스 질문

고유성을 위해 GUID를 테스트하는 최적의 방법은 무엇입니까? 블룸 필터?


그래 넌 할수있어. GUID의 길이는 128 비트이므로 약간의 충돌 가능성이 있지만 "분"이라는 단어는 충분히 강하지 않습니다. GUID너무 많아 수조 개 를 무작위로 생성 하더라도 Wikipedia 에서 한 번의 충돌보다 운석에 맞을 가능성이 여전히 높습니다 . 그리고 무작위로 생성하지 않지만 를 들어 MAC 주소 및 시간 스탬프 알고리즘을 사용하는 경우 MAC 주소는 컴퓨터마다 고유하고 타임 스탬프는 컴퓨터에서 고유하므로 고유 합니다. 컴퓨터.

편집 1 : 보너스 질문에 대답하기 위해 GUID 세트를 고유하게 테스트하는 가장 좋은 방법은 모두 GUID라고 가정하는 것입니다. 왜? 생성하는 GUID의 수가 많기 때문에 GUID 충돌 가능성은 컴퓨터 메모리의 비트를 뒤집고 관심있는 "정확한"알고리즘에 의해 제공된 대답을 망쳐 놓는 우주 광선의 확률보다 작습니다. 실행합니다. 수학에 대한 이 StackOverflow 답변참조하십시오 .

있다 거대한 거기의 GUID의 수. Douglas Adams의 Hitchhiker 's Guide to the Galaxy 를 인용하려면 :

"공간"은 "크다. 정말 크다. 당신은 얼마나 큰 마음이 큰지 믿지 못할 것이다. 나는 그것이 화학자에게가는 길은 멀다고 생각할지도 모른다. 그러나 그것은 단지 땅콩은 우주로가는 길이다"라고 말했다. 들어 봐… "

그리고 우주 에는 약 7 × 10 22 개의 별이 있고 , 2128 개의 GUID 바로 아래에 있기 때문에, 모든 별 하나당 약 4.86 × 10 15 ( 거의 5 조 개)의 GUID가 있습니다 . 그 별들 모두가 우리와 같이 번성하는 인구를 가진 세계를 가졌다면, 모든 별 주위에서, 지금까지 살았던 모든 인간 또는 외계인은 45 만 명 이상의 GUID를받을 자격이 있습니다. 우주의 모든 별에서 역사상의 모든 사람을 위해. GUID 공간은 전체 우주의 크기와 같은 수준의 거대합니다. 당신은 할 수 없습니다 걱정할 필요.

( 편집 2 : 이것에 반영 : 와우. 나는 이것이 의미하는 바를 스스로 깨닫지 못했다 . GUID 공간은 이해할 수 없을 정도로 방대하다. 나는 그것을 두려워한다.)


짧은 대답 : 실용적인 목적으로 사용하십시오.

그러나 생일 역설을 고려해야합니다!

몇 가지 대표적인 충돌 확률을 계산했습니다. Wikipedia 기사에 지정된 122 비트 UUID를 사용하면 최소한 2.71492e18UUID 를 생성하면 충돌 확률이 1/2 입니다. 10 ^ 19 UUID의 경우 확률은 0.999918입니다. 10 ^ 17 UUID, 0.000939953

비교를위한 일부 숫자는 Wikipedia에서 찾을 수 있습니다. 따라서 살았던 각 인간, 관측 가능한 우주의 각 은하, 바다의 각 물고기 및 지구의 각 개미에 대한 UUID를 안전하게 할당 할 수 있습니다. 그러나 1 년 안에 각 인류가 생성하는 트랜지스터, 지구의 곤충, 지구의 모래 알갱이, 관측 가능한 우주의 각 별 또는 더 큰 것에 대해 UUID를 생성하면 충돌이 거의 확실합니다.

초당 10 억 개의 UUID를 생성 하면 충돌 확률 10 %를 얻는 데 약 36 년이 걸립니다 .

결국 인류 역사에 걸쳐 생성 된 UUID 세트간에 충돌이있을 수 있습니다. 그럼에도 불구하고 충돌 된 UUID가 동일한 목적으로 사용될 확률은 거의 없기 때문에 실제로 문제는 없습니다.


충돌 가능성에 대한 분석은 Wikipedia에서 사용 가능합니다 : http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates

링크에서 언급했듯이 이는 난수 생성기의 속성에 영향을받습니다.

GUID 생성기 코드에 버그가있을 수도 있습니다. 가능성은 낮지 만 수학에 기반한 충돌 가능성보다 높을 수 있습니다.

블룸 필터가 적합 할 수 있습니다. GUID가 고유한지 신속하게 알려줄 수 있지만 충돌을 잘못 표시 할 가능성이 있습니다. 한 번에 배치를 테스트하는 경우 다른 방법은 배치를 정렬하고 각 연속 요소를 비교하는 것입니다.


일반적으로 그렇습니다. 가정하는 것이 안전합니다.

GUID 생성기가 무작위 인 경우 1000 GUID 내에서의 충돌 가능성은 매우 작습니다.

물론, 그것은 좋은 GUID 생성기를 가정합니다. 문제는 실제로 GUID를 생성하는 데 사용하는 도구를 얼마나 신뢰하고 있으며 자체 테스트가 있습니까?


충돌이 가능하지만 가능성은 거의 없습니다. (매트는 여기에 있습니다 .) 그것들이 실제로 구별된다고 가정하는 것이 안전합니다.


일반적으로 꽤 안전한 가정입니다.

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

GUID가 100 % 고유한가요?

참고 URL : https://stackoverflow.com/questions/2977593/is-it-safe-to-assume-a-guid-will-always-be-unique

반응형