2012-12-12 3 views
-1

모든 행의 고유 ID (RowID)가있는 데이터베이스 테이블이 있습니다.6 자의 고유 한 문자열에 고유 번호 매핑

이 RowID를 항상 길이가 6 자의 고유 키로 변환하는 좋은 방법이 있습니까? 고유 한 키 문자는 {A-Za-z0-9} 일 수 있습니다. 고유 키의 한 예는 a5Fg3A입니다.

물론이 메서드를 사용하여 생성 할 수있는 키의 수는 일정하지만 그 경우는 중요하지 않습니다.

나는 이것에 대해 많은 생각을했지만 올바르게 처리 할 수있는 알고리즘을 생각해 낼 수 없습니다. 내가 가진

하나 개의 아이디어였다 123 000,123 1가에있는 숫자 다음

000001된다되고 : ROWID 예를 들어, 다음의 앞에 0을 추가 100000보다 낮은 경우 고유 키 =이 을 ROWID 100000 ~ 900000 범위의 첫 번째 숫자를 문자열로 바꿉니다. 예 : 0 = a, 1 = b, 2 = c, ..., 9 = j이다.

그럼 난

내 문제는 내 알고리즘은 매우 제한하고 가능한 모든 문자를 사용하지 않기 때문에 키의 낮은 수를 생성하는 등등, 대문자와 동일 할 수있다.

기본적으로 56800235584 개의 고유 키를 생성 할 수 있어야합니다. 각 키의 길이는 6이고 다음 문자를 사용합니다. {A-Za-z0-9}.

A-Z = 26 개 문자 A-Z = 26 개 문자 0-9 = 10 문자

그래서 62^6 고유 키

이다.

모든 의견이이

감사합니다 :-) (또는 최적의)가 제대로 수행하는 방법에 주시면 감사하겠습니다!

+2

숫자를 기본 62 표현으로 변환하는 방법을 찾고 계시지 않습니까? –

+0

그건 맞아요, 그 속임수를했습니다. 감사! – raRaRa

답변

1

A-Z a-z 0-9가 알파벳으로 인식되도록하려면 기본 62 숫자 체계가 있어야합니다. 그래서 기본 62의 고유 한 ROWID를 인코딩하면 그렇게 할 수있는 표준 알고리즘이 있습니다. 응용 프로그램에서 (필요에 따라) '+', '/', '!', '@'와 같은 인쇄 가능한 문자를 몇 개 더 추가 할 수 있습니다. 준비된 대답은 널리 사용되는 base64 인코딩입니다.

+0

좋은 지적. 숫자의 인코딩 된 값이 6 자 미만인 경우 앞에 문자를 추가해도 안전합니까? – raRaRa

+0

어느 번호를 선택 하든지 0이됩니다 ... 고정 길이가 필요하면 왼쪽에 0을 덧붙일 수 있습니다. 일반 데이터베이스를 사용하는 경우 가변 길이 열 (varchar)을 사용하면 절약 할 수 없으므로 패드를 사용하는 것이 좋습니다. – user1666959

1

ID를 정렬 한 다음 증가하는 사전 식 문자열을 각각에 첨부 할 수 있습니다.

당신의 알파벳 만 {a,b} (단순에만)입니다

간단한 예를 들어, 및 Ids= [20,1,7,90] : 의존

sort: Ids = [1,7,20,90] 
Attach increasing strings: 
1 = aaaaaa 
7 = aaaaab 
20 = aaaaba 
90 = 0000bb 

당신이 어떤 종류의 해시 함수를 원하는 경우, 그리고 데이터 - 당신이 할 수있는 숫자에 사용 된 것과 동일한 이진 인코딩을 사용하고 similary로 변환하십시오 (예 : 1 = aaaaaa, 2 = aaaaab, 3 = aaaaac ...)
[편집 : 기본적으로 기본 62와 동일 @HighPerformanceMark 코멘트에]


첫 번째 접근법의 장점 : 두 번째 방법은 허용하지 않는 한 최대 62^6 개의 숫자를 처리 할 수 ​​있습니다.

그러나 두 번째 방법은 특정 데이터에 관계없이 숫자에서 문자열로의 일관된 변환을 허용합니다.

+0

큰 피드백에 감사드립니다. 실제로 행 ID를 base62로 변환하면 트릭이 생겼다 :-) – raRaRa

0

다양한 방법이 있습니다. 귀하의 기준이 무엇이든간에 "최선"인 것을 선택하는 것이 어렵습니다. 몇 가지 예,하지만 지금부터 철저한 (일부 다른 곳에서 이미 제안) : 증가하는 순서

  • 기본-62 표현과
    • 패드

      (참고 :베이스 (64)는 일반적으로 사용하고 심지어 이미 사용할 코드가있을 수 있습니다
    • 잘린 암호화 해시 (천천히하지만, 필요한 이유에 따라 유용 할 수있는 몇 가지 다른 속성이 있지만, 한 번만 수행하면 성능이 저하됩니다 그럴만 한 가치가있을 수 있습니다)
    • 상당히 빨라야 할 수있는 기타 필수 암호화 암호 해시 함수
    • ......