GUID에 대해 표준 형식이 필요한 이유는 무엇입니까?

Astef

어느 열심히 일하는 날, 나는 일반적인 .NET의 방법 으로 생성 한 GUID 가 세 번째 블록의 시작 부분에 Guid.NewGuid()동일한 숫자 4가지고 있음을 발견했습니다 .

efeafa5f-fe21-4ab4-ba82-b9eefd5fa225
480b64d0-6762-4afe-8496-ac7cf3292898
397579c2-a4f4-4611-9fda-16e9c1e52d6a
...

1 초에 한 번씩 10 개가 화면에 나타납니다. 다섯 번째 GUID 직후이 패턴을 계속 주시했습니다. 마지막으로, 마지막 것은 같은 4 개의 비트를 가지고 있었고 나는 운이 좋은 사람이라고 결정했습니다. 나는 집에 돌아 갔고, 나 같은 특별한 사람에게 온 세상이 열려 있다는 것을 느꼈다. 다음 주에 나는 새로운 일을 발견하고 방을 청소하고 부모님에게 전화를 걸었습니다.

하지만 오늘도 같은 패턴에 직면했습니다. 천 번. 그리고 나는 더 이상 선택된자를 느끼지 않습니다.

나는 그것을 봤했고 지금은 알고 UUID 4 예약에 대한 비트 정규 형식 version및 2 variant.

다음은 실험 할 스 니펫입니다.

static void Main(string[] args)
{
    while (true)
    {
        var g = Guid.NewGuid();
        Console.WriteLine(BitConverter.ToString(g.ToByteArray()));
        Console.WriteLine(g.ToString());
        Console.ReadLine();
    }
}

그러나 여전히 내가 이해하지 못하는 것이 하나 있습니다 (살아가는 방법을 제외하고). 이러한 예약 된 비트가 필요한 이유는 무엇입니까? 내부 구현 세부 사항 노출, 더 많은 충돌 (여전히 걱정할 필요가 없지만 언젠가 ...), 더 많은 자살-하지만 어떤 이점도 보지 못합니다. 내가 찾도록 도와 줄 수 있습니까?

내부 GUID 생성 알고리즘

데이브

알고리즘을 업데이트하면 해당 번호를 변경할 수 있습니다. 그렇지 않으면 서로 다른 두 알고리즘이 서로 다른 이유로 정확히 동일한 UUID를 생성하여 충돌을 일으킬 수 있습니다. 버전 식별자입니다.

예를 들어 인위적인 단순 UUID 형식을 고려하십시오.

00000000-00000000
  time  -   ip

이제 어떤 이유로 해당 형식을 다음과 같이 변경한다고 가정합니다.

00000000-00000000
   ip   -  time

IP 12.34.56.78을 가진 컴퓨터가 01234567 시간에 첫 번째 방법을 사용하여 UUID를 생성하고 나중에 IP 01.23.45.67을 사용하는 두 번째 컴퓨터가 새로운 방법을 사용하여 시간 12345678에 UUID를 생성 할 때 충돌이 발생할 수 있습니다. 그러나 버전 식별자를 위해 일부 비트를 예약하면 충돌이 발생할 수 없습니다.

값 4는 시간, MAC 주소, pid 또는 기타 종류의 시간 및 공간 식별자의 조합을 사용할 수있는 다른 방법이 아니라 무작위로 생성 된 UUID (따라서 너무 많은 비트가 주어진 충돌 가능성에 의존 함)를 나타냅니다. 고유성을 보장합니다.

관련 사양은 여기를 참조하세요 : https://tools.ietf.org/html/rfc4122#section-4.1.3

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

GUID에 대해 표준 형식이 필요한 이유는 무엇입니까?

분류에서Dev

Symfony2 : 양식의 선택 필드 유형에 대한 "표준"데이터는 무엇입니까?

분류에서Dev

중첩 된 if에 대해 Range (Len))이 필요한 이유는 무엇입니까?

분류에서Dev

파일에 대한 644 권한이 필요한 이유는 무엇입니까?

분류에서Dev

stdin이 필요한 명령에 대해 파이핑이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

표준 명령에 대한 앨리어싱이 권장되지 않는 이유는 무엇입니까?

분류에서Dev

openFileOutput에 대한 try catch 블록이 필요한 이유는 무엇입니까?

분류에서Dev

Firefox에 Netflix 동영상을 표시하기 위해 libavcodec-extra가 필요한 이유는 무엇입니까?

분류에서Dev

프롤로그에 대한 ISO 모듈 표준이 실패한 이유는 무엇입니까?

분류에서Dev

videoFrameSize 속성에 대한 표준 형식이 있습니까?

분류에서Dev

videoFrameSize 속성에 대한 표준 형식이 있습니까?

분류에서Dev

std :: ops : Mul에 출력 유형에 대한 제한이 필요하지 않은 이유는 무엇입니까?

분류에서Dev

jq에 때때로 필터 표현식이 필요한 이유는 무엇입니까?

분류에서Dev

"ln"명령에 절대 경로가 필요한 이유는 무엇입니까?

분류에서Dev

"ln"명령에 절대 경로가 필요한 이유는 무엇입니까?

분류에서Dev

Perl에서 정규 표현식의 결과를 저장하기 위해 괄호가 필요한 이유는 무엇입니까?

분류에서Dev

std :: vector에 요소에 대한 이동 생성자가 필요한 이유는 무엇입니까?

분류에서Dev

ADFS에 대한 SAML 요청에 서명이 필요한 이유는 무엇입니까?

분류에서Dev

PING 응답에 원래 호스트 MAC에 대한 ARP 요청이 필요한 이유는 무엇입니까?

분류에서Dev

데이터 유형에 대한 복잡한 HTML보기를 표준화하는 데 선호되는 방법은 무엇입니까?

분류에서Dev

깔끔한 모델에서 준비, 베이킹 및 주스가 필요한 이유는 무엇입니까?

분류에서Dev

Typescript에 any 유형이 필요한 이유는 무엇입니까?

분류에서Dev

여기에 유형 주석이 필요한 이유는 무엇입니까?

분류에서Dev

Mondrian-계층 구조에서 멤버를 참조하기 위해 명시적인 수준이 필요한 이유는 무엇입니까?

분류에서Dev

1D / 2D 배열에 대한 기본 포인터 유형은 무엇이며 이중 역 참조가 필요한 이유는 무엇입니까?

분류에서Dev

실행 파일에 바이너리 형식 사양이 필요한 이유는 무엇입니까?

분류에서Dev

표준 분류 유형에 대한 IClassifier를 얻는 방법은 무엇입니까?

분류에서Dev

이 멤버 함수에 대한 포인터 유형 템플릿 매개 변수에 대해 표준이 말하는 것은 무엇입니까? 내 코드가 잘못되었거나 MSVS 16.6 버그가 있습니까?

분류에서Dev

Octopress에 Sinatra gem이 필요한 이유는 무엇입니까?

Related 관련 기사

  1. 1

    GUID에 대해 표준 형식이 필요한 이유는 무엇입니까?

  2. 2

    Symfony2 : 양식의 선택 필드 유형에 대한 "표준"데이터는 무엇입니까?

  3. 3

    중첩 된 if에 대해 Range (Len))이 필요한 이유는 무엇입니까?

  4. 4

    파일에 대한 644 권한이 필요한 이유는 무엇입니까?

  5. 5

    stdin이 필요한 명령에 대해 파이핑이 작동하지 않는 이유는 무엇입니까?

  6. 6

    표준 명령에 대한 앨리어싱이 권장되지 않는 이유는 무엇입니까?

  7. 7

    openFileOutput에 대한 try catch 블록이 필요한 이유는 무엇입니까?

  8. 8

    Firefox에 Netflix 동영상을 표시하기 위해 libavcodec-extra가 필요한 이유는 무엇입니까?

  9. 9

    프롤로그에 대한 ISO 모듈 표준이 실패한 이유는 무엇입니까?

  10. 10

    videoFrameSize 속성에 대한 표준 형식이 있습니까?

  11. 11

    videoFrameSize 속성에 대한 표준 형식이 있습니까?

  12. 12

    std :: ops : Mul에 출력 유형에 대한 제한이 필요하지 않은 이유는 무엇입니까?

  13. 13

    jq에 때때로 필터 표현식이 필요한 이유는 무엇입니까?

  14. 14

    "ln"명령에 절대 경로가 필요한 이유는 무엇입니까?

  15. 15

    "ln"명령에 절대 경로가 필요한 이유는 무엇입니까?

  16. 16

    Perl에서 정규 표현식의 결과를 저장하기 위해 괄호가 필요한 이유는 무엇입니까?

  17. 17

    std :: vector에 요소에 대한 이동 생성자가 필요한 이유는 무엇입니까?

  18. 18

    ADFS에 대한 SAML 요청에 서명이 필요한 이유는 무엇입니까?

  19. 19

    PING 응답에 원래 호스트 MAC에 대한 ARP 요청이 필요한 이유는 무엇입니까?

  20. 20

    데이터 유형에 대한 복잡한 HTML보기를 표준화하는 데 선호되는 방법은 무엇입니까?

  21. 21

    깔끔한 모델에서 준비, 베이킹 및 주스가 필요한 이유는 무엇입니까?

  22. 22

    Typescript에 any 유형이 필요한 이유는 무엇입니까?

  23. 23

    여기에 유형 주석이 필요한 이유는 무엇입니까?

  24. 24

    Mondrian-계층 구조에서 멤버를 참조하기 위해 명시적인 수준이 필요한 이유는 무엇입니까?

  25. 25

    1D / 2D 배열에 대한 기본 포인터 유형은 무엇이며 이중 역 참조가 필요한 이유는 무엇입니까?

  26. 26

    실행 파일에 바이너리 형식 사양이 필요한 이유는 무엇입니까?

  27. 27

    표준 분류 유형에 대한 IClassifier를 얻는 방법은 무엇입니까?

  28. 28

    이 멤버 함수에 대한 포인터 유형 템플릿 매개 변수에 대해 표준이 말하는 것은 무엇입니까? 내 코드가 잘못되었거나 MSVS 16.6 버그가 있습니까?

  29. 29

    Octopress에 Sinatra gem이 필요한 이유는 무엇입니까?

뜨겁다태그

보관