2011-09-06 5 views
1

Guid가 고유 한 식별자로 사용하는 것이 안전하다는 주장에 대해 여전히 머리를 맞지는 않습니다. 위키 피 디아 페이지가 말합니다Guids로 안전하게 만들 수있는 id 수는 얼마입니까?

총 키 수는 너무 커서 동일한 번호가 무작위로 두 번 생성 될 확률이 무시할 수 있습니다.

제 질문은 확률이 무시할 수 없을 때까지 얼마나 많은 ID를 안전하게 생성 할 수 있습니까? 내 말은, 제한이 있어야한다는 것입니다 (대부분 비둘기 제한).

Guid 생성의 구현이 다양하면 .NET Guid를 가정 해 봅시다.

답변

3

나는 혼자서 테스트를했고 1 주일 후 1 테라 바이트의 가이드가 여전히 중복이 없었습니다.

See here 확률의 아이디어가 있습니다.

+0

그건 헌신입니다. –

-1

내 기계가 다르게 생성된다는 것을 의미합니다. 즉, 지금 기계에서 생성을 시작하면 onether 기계가 할 수있는 것과 동일한 것을 생성 할 위험이 없습니다.

스트레스를 실제로 원한다면 해당 열에 고유 인덱스가있는 데이터베이스에 생성 및 저장을 시작하고 첫 번째 충돌이 감지되기 ​​전에 삽입 할 행의 수를 확인하면 응용 프로그램이 여러 최소 년.

편집 :

는 IPv6 주소의 동일한 범위를 가지고 있으며,이 내가 IPv6를 발견 한 것을 :

128 비트 주소 공간을. 다른 말로하면 이론적으로 340282366920938463463374607,431,768,211,456 주소 을 사용할 수 있습니다. 즉, 지구상에 평방 미터당 약 6.67 * 10^27 IPv6 개의 주소가 있음을 의미합니다.

db 테이블의 6.67 * 10^27 레코드로 충분하다고 생각하십니까? 행성의 모든 평방 미터에서 우리는 자체의 GUIDS를 생성하는 컴퓨터를 가지고 있습니다. 바다, 사하라 등등 ... 또한이 유니크를 충분히 고려할 수 있다고 생각합니다.

+0

나는이 질문에서 원하는 것은 "몇 년"의 추측에 도달하게하는 기술적 인 분석이다. –

+0

@ 루이스 : 기술적 인 분석을 위해서는 내 대답의 생일 문제 링크를보십시오. 그것은 당신에게 어려운 수학을 제공합니다. –

+0

"guids"는 모든 머신에서 다르게 생성됩니다. : 더 이상 사용되지 않는 UUID 버전 1에 적용됩니다. – svick

3

엄밀히 말하면 위키 백과 Random UUID probability of duplicates.

122 비트의 의미있는 비트를 가진 java.util.UUID에 대한 충돌 확률을 설명합니다. .NET의 System.Guid은 128 비트를 모두 사용하지만이 기사에서는 몇 가지 aproximations를 제공합니다.

만 향후 100 년 동안 매 초마다 10 억 UUID를 생성 한 후, 하나 개의 중복을 만드는 확률은 약 50 %가 될 것입니다. 지구상에있는 모든 사람이 6 억 명의 UUID를 소유하고 있다면 하나의 복제본 확률은 약 50 %입니다.

+0

'System.Guid'는 모두 128 비트가 무작위입니까? 나는 그것이 항상 버전 사양을 위해 10 비트를 예약한다는 것을 의미하는 버전 4 UUID를 생성한다고 생각한다. – svick

+0

@Svick : 아니요, 정말 무작위가 아닙니다. 몇 가지 구조가 있으며 몇 가지 다른 버전이 있습니다. http://en.wikipedia.org/wiki/Globally_unique_identifier를 참조하십시오. –

2

GUID를 생성하는 데는 여러 가지 방법이 있습니다. 일부 구현은 다른 것보다 강합니다. 좋은 GUID 구현은 임의의 128 비트 숫자와 비슷합니다. 즉, GUID에서 128 가지 상태 (2에서 38까지 약 3.4 배)가 가능합니다.알고리즘은 일반적으로 완전히 랜덤하지 않으며 GUID가 생성 된 시간 및/또는 생성 된 시간에 대한 정보를 포함 할 수 있습니다.

비교해 보면, observable universe에는 21 개의 별에 9 × 10이 추정됩니다.

38 개 상태에 대해 10 배의 3.4를 갖고 있고 (잠재적으로 큰) 상태 샘플을 검토하여 두 상태가 같은지 확인하려는 경우이를 Birthday Problem이라고합니다. 수학을 살펴보면 2 개의 GUID가 동일한 의미있는 확률을 갖기 위해 실제로 많은 수의 샘플이 필요하다는 것을 알 수 있습니다 (GUID 생성 방법에 생성 된 기계 및/또는 시간에 대한 정보가 포함되어있는 경우, GUID를 생성 할 수있는 방법에 대한 제약이 더 많습니다).

최근에 나는 1,000,000 개의 데이터 포인트 집합에 대한 해시 충돌에 대한 계산을 수행했으며 40 비트로 해쉬 충돌 가능성이 매우 낮다는 것을 발견했습니다. 128 비트의 경우 해시 충돌 가능성 (동일한 1,000,000 데이터 포인트에 대해)은 천문학적으로입니다.

관련 문제