복붙노트

[MONGODB] 대규모 분산 시스템에서 UUID 대 ObjectId가의 충돌 확률

MONGODB

대규모 분산 시스템에서 UUID 대 ObjectId가의 충돌 확률

UUID가 4122 (16 바이트) RFC 것을 고려하는 것은 MongoDB를 ObjectId가 (12 바이트)보다 훨씬 큰, 나는 그들의 충돌 확률 비교 방법을 찾기 위해 노력하고있다.

그 주위에 매우 가능성이 뭔가 알고 있지만, 내 경우에는 대부분의 ID는 서버가 아닌 제한된 내에서 모바일 클라이언트의 많은 수에서 생성됩니다. 이 경우, 정당한 우려가있는 경우 궁금하다.

모든 ID가 소수의 클라이언트에 의해 생성 된 통상의 경우에 비해 :

해결법

  1. ==============================

    1.그 소리는 나에게 아주 나쁜 아키텍처를 좋아한다. 당신은 2 계층 아키텍처를 사용하고 있습니까? 왜 모바일 클라이언트는 DB에 직접 접근 할 것인가? 당신은 정말 네트워크 기반 보안에 의존 하시겠습니까?

    그 소리는 나에게 아주 나쁜 아키텍처를 좋아한다. 당신은 2 계층 아키텍처를 사용하고 있습니까? 왜 모바일 클라이언트는 DB에 직접 접근 할 것인가? 당신은 정말 네트워크 기반 보안에 의존 하시겠습니까?

    어쨌든, 충돌 확률에 대한 몇 가지 심의 :

    UUID도 ObjectId가 어느 쪽도 모두 난수하지 않은 즉, 자신의 규모에 의존하지만, 그들은 시도 체계적으로 충돌 확률을 줄일 수있는 방식을 따릅니다. 하며 Object의 경우, 그 구조는 다음과 같다 :

    ,하며 Object 아마 가장 중요한 속성입니다 (하나의 초 이내 제외) 단조이다 UUID를 달리이 의미합니다. 모노 토닉 인덱스는 ID로 페이징을 허용하고 커서 안정을 위해 ID로 '분류 기준 기본'을 허용하고, 물론, 그들은 쉬운 추출물 타임 스탬프를 가지고, B- 트리보다 효율적으로 가득하게됩니다. 이들은 당신이 알고 있어야 최적화이며, 그들은 거대한 될 수 있습니다.

    당신이 다른 세 구성 요소의 구조에서 볼 수 있듯이 당신이> 1K 삽입을하고 있다면, 충돌 가능성이 될 / (심지어 서버에서, 정말 불가능) 단일 프로세스에 S 또는 기계의 수가 증가하는 경우 (10)에 대한 과거 (생일 문제 참조) 한 컴퓨터에서 프로세스의 수는 다시 다음 (너무 큰 성장 경우, 또는 그 임의의 숫자는 아니지만,이 기계에 독특한,하지만 그들은 두 바이트로 단축해야 ).

    충돌이 발생하는 물론, 그들은 모든면에서 일치해야합니다 그래서 두 머신 같은 기계 해시를 경우에도 여전히 동일한 초에 같은 카운터 값과 동일한 프로세스에 삽입하는 클라이언트를 필요 것 ID는하지만, 예,이 값이 충돌 할 수 있습니다.

  2. ==============================

    2.문서에서 "ObjectId가"에 대한 스펙에서 살펴 보자 :

    문서에서 "ObjectId가"에 대한 스펙에서 살펴 보자 :

    그래서 우리는 "모바일 클라이언트"의 맥락에서이 문제를 생각해 보자.

    포인트 그래서 :

    즉 소화 할 수있는 설득력 충분한 인수가 아닌 경우 결론은 간단하게 "기본 키"값으로 자신의 "UUID"항목을 제공한다.

    그러나 IMHO, 즉 여기 충돌 양상은 매우 광범위 것을 고려하는 인수를 설득 공정해야한다. 적어도 말을합니다.

    전체 주제는 아마 조금 "너무 넓은"입니다. 그러나 나는 "아주 가능성"에서 뭔가에 좀 더 구체적인에서 조금 더 멀리이 이동 고려를 바랍니다.

  3. from https://stackoverflow.com/questions/22606364/collision-probability-of-objectid-vs-uuid-in-a-large-distributed-system by cc-by-sa and MIT license