uuid(universal unique identifier)
:실제 용도에서 안전하게 고유하다고 생각할 수 잇는 특정 형태의 식별자
정확하게 생성된 두 uuid는 서로 다른 당사자에 의해 두 개의 서로 다른 환경에서 작성된 경우에도 정확히 동일할 가능성이 거의 없다. 실제 uuid는 표준화된 형식에 의해 생성되고 표현되는 고유 식별자이다. 유효한 uuid는 RFC 4122에 의해 정의된다. 이 사양은 중앙 발급 기관 없이도 여러 구현 간에 고유성을 유지하는 데 사용할 수 있는 알고리즘을 설명한다.
RFC에는 다음과 같은 다섯가지 다른 알고리즘이 포함되어 있고, 각 알고리즘은 값을 생성하기 위해 서로 다른 메커니즘을 사용한다.
uuid 버전 | 요약 | 설명 |
버전1 | 시간 기준 | 타임 스탬프, 클럭 시퀀스 및 생성 장치별 값(일반적으로 해당 MAC 주소)을 조합하여 해당 시점에 호스트에 대해 고유한 출력을 생성한다. |
버전2 | DCE 보안 | 분산 컴퓨팅 환경(DCE)을 위한 버전 1의 진화 |
버전3 | 이름 기반(MD5) | md5 해시 "네임스페이스" 및 "이름"은 네임스페이스에서 해당 이름의 고유값을 만든다. 네임스페이스와 이름이 같은 다른 uuid를 생성하면 동일한 출력이 생성되므로 이 메서드는 재현 가능한 결과를 제공한다. |
버전4 | 임의 | 대부분의 현대 시스템은 호스트의 랜덤 또는 의사 난수 소스를 사용하여 값을 게시하기 때문에 uuid v4를 선택하는 경향이 있다. 동일한 uuid가 2번 생성될 가능성은 거의 무시할 수 있다. |
버전5 | 이름 기반(SHA-1) | 버전3과 유사하지만 더 강력한 SHA-1 알고리즘을 사용하여 입력 네임스페이스와 이름을 해시한다. |
RFC는 알고리즘을 버전이라고 하지만, 어떤 버전을 선택하느냐는 사용 사례에 따라 달라진다. 많은 경우 v4를 선택하는데, 이는 무작위성 때문이다. 이렇게 하면 단순한 새로운 식별자 장면에 이상적인 후보가 된다.
활용 사례
uuid의 주요 사용 사례는 분산 생성 고유 식별자이다. 백엔드 코드, 클라이언트 장치 또는 데이터베이스 엔진으로부터 uuid를 생성하고 안전하고 고유하게 간주할 수 있다. uuid는 연결이 끊어진 환경에서 객체 id를 식별하고 유지하는 프로세스를 단순화한다. 과거에는 대부분의 응용프로그램에서 자동으로 증분되는 정형 필드를 기본 키로 사용했다. 새 객체를 생성할 때 데이터베이스에 삽입해야 id를 알 수 있다. uuid를 사용하면 응용프로그램에서 더 일찍 id를 식별할 수 있다.
데이터 베이스 발생 시 고려 사항
uuid의 이점은 매우 눈에 띈다. 그러나 실제 시스템에서 이를 사용할 때 주의해야 할 몇 가지 함정이 있다. 정수 id를 지원하는 중요한 요소는 확장 및 최적화가 용이하다는 것이다. 데이터 베이스 엔진은 한방향으로만 숫자 목록을 인덱스화, 정렬 및 필터링 할 수 있다.
하지만 uuid는 그렇게 말할 수 없다.
uuid는 정수보다 4배 크다(36바이트). 대형 데이트 세트의 경우 그 자체로 중요한 고려사항이다. 값의 정렬과 색인도 특히 가장 일반적인 랜덤 uuid의 경우 훨씬 더 복잡해야 한다. 그들의 무작위성은 자연의 질서가 없다는 것을 의미한다. uuid를 기본키로 사용할 경우ㅜ 이는 인덱스 성능에 영향을 미친다. 이러한 문제는 외래키를 많이 사용하는 정규화가 양호한 데이터베이스에서 복합적으로 나타날 수 있다. 이제 36바이트 uuid에 대한 참조를 포함하는 많은 관계형 테이블이 있을 수 있다. 결국 조인 및 정렬을 수행하는 데 필요한 추가 메모리가 시스템 성능에 큰 영향을 줄 수 있다.
uuid를 이진 데이터로 저장하여 이러한 문제를 부분적으로 완화할 수는 있다.
binary(16) 열이 아니라 varchar(36)으로 저장한다는 의미이다.
유효한 정책 중 하나는 정수를 기본 키로 유지하되 응용프로그램 참조를 위해 추가 uuid 필드를 추가하는 것이다.
관계형 링크 테이블은 id를 사용하여 성능을 향상시키는 동시에 코드에서 uuid가 있는 최상위 객체를 가져와 삽입할 수 있다. 결국 시스템, 규모, 우선 순위에 따라 달라질 수 있다. uuid는 분산된 id 생성 및 간단한 데이터 병합이 필요할 때 최선의 선택이지만 고려사항을 꼭 함께 고려해야 한다.
References
'Data Engineering' 카테고리의 다른 글
FutureWarning: 데이터프레임 행 subset 얻기 (0) | 2024.05.18 |
---|---|
파이썬은 모든 것이 객체다, is와 이항 연산자... (0) | 2024.05.18 |
Python 딕셔너리 (0) | 2024.05.18 |
리스트, 배열과 연결 리스트를 통합하고 속도는 양보한 파이썬의 객체 타입 (0) | 2024.05.17 |
Kafka에 대한 간단한 아키텍쳐 소개 (0) | 2024.05.17 |