문제

주어진 고유 문자열에 대한 고유 레코드 ID를 생성해야합니다.

나는 좋은 것처럼 보이는 UUID 형식을 사용해 보았습니다.

그러나 우리는 그것이 길다 고 생각합니다.

따라서 UUID 문자열 9F218A38-12CD-5942-B877-80ADC0589315를 더 작은 것으로 잘라야합니다. '-'우리는 4 숯을 절약 할 수 있습니다. UUID에서 제거하는 가장 안전한 부분은 무엇입니까? 우리는 보편적으로 고유 한 ID가 필요하지 않지만 UUID를 소스로 사용하지만 문자열을 잘라내는 것을 좋아합니다.

사이트/데이터베이스 (SQL Server/ADO.NET Data Services)에 맞는 고유 ID가 필요합니다.

모든 언어의 아이디어 나 샘플은 괜찮습니다

미리 감사드립니다

도움이 되었습니까?

해결책

대신베이스 64 문자열로 변환하지 않겠습니까? 그런 식으로 22 자로자를 수 있습니다.

UUID를 Base64 문자열로 저장합니다

다른 팁

MS-SQL을 사용하는 경우 OrightIndentifier 데이터 유형을 사용해야 할 것입니다. SQL 엔진이 알고 있으므로이를 사용하여 인덱스 및 쿼리를 최적화 할 수 있습니다.

UUID는 (거의) 128 비트의 독창성을 제공합니다. 16 바이드 바이트 또는 22 개의 Base64 인코딩 된 문자로 단축 할 수 있습니다. UUID의 일부를 제거하는 것이 좋습니다. 그렇지 않으면 감각을 잃습니다. UUID는 128 비트의 모든 의미를 갖도록 설계되었습니다. 그보다 적게 원한다면 다른 스키마를 사용해야합니다.

예를 들어, 버전 4 UUID 만 사용되도록 보장 할 수 있다면 처음 32 비트 또는 마지막 32 비트 만 소요될 수 있습니다. 당신은 독창성을 잃지 만, 당신은 꽤 임의의 숫자를 가지고 있습니다. 고정 된 비트를 피하십시오 (버전 및 변형).

그러나 당신이 그것을 보장 할 수 없다면, 당신은 실제 문제가있을 것입니다. 버전 1 UUID의 경우, 첫 번째 비트는 같은 날에 생성 된 UUID에 대해 고유하지 않으며 마지막 비트는 동일한 시스템에서 생성 된 UUID의 경우 고유하지 않습니다. UUID를 CRC하더라도 16 개 또는 32 비트의 독창성을 가질 수는 없습니다.

이 경우 다른 체계 만 사용하십시오. 시스템 랜덤 번호 생성기를 사용하여 32 비트 랜덤 번호를 생성하고이를 고유 ID로 사용하십시오. 길이를 제거하려는 경우 uuids에 의존하지 마십시오.

UUID는 128 비트 또는 16 바이트입니다. 인코딩이 없으면 16 바이트만큼 낮게 얻을 수 있습니다. uuids는 일반적으로 16 진수로 작성되어 32 바이트 읽기 가능한 문자열이됩니다. 다른 인코딩을 사용하면 다른 결과를 얻을 수 있습니다.

  1. Base-64는 3 개의 8 비트 바이트를 4 개의 6 비트 문자로 바꾸므로 16 바이트의 데이터가 22자가됩니다.
  2. Base-85는 4 개의 8 비트 바이트를 5 개의 6.4 비트 문자로 바꾸므로 16 바이트의 데이터가 20자가됩니다.

읽을 수있는 문자열을 원하는지 여부와 표준/공통 인코딩을 사용하려는 방법에 따라 다릅니다.

UUID에는 128 비트가 있습니다. CRC를 고려해 보셨습니까? 이를 통해 쉽게 16 또는 32 비트로 내려갈 수 있으며 모든 원본 정보를 사용할 수 있습니다. CRC가 충분하지 않으면 항상 적절한 해시의 처음 몇 바이트를 사용할 수 있습니다 (예 : SHA256).

정말로 UUID를 잘라 내고 싶다면 그 형식이 다음에 설명되어 있습니다. RFC 4122. 구현에 필요한 부품을 파악할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top