2015-01-05 2 views
1

나는 SQL 기반 db에서 일부 데이터를 병합해야하는 스크립트를 작성하고 있습니다. 각 행에는 기본 키 (증분)로 긴 정수가 있습니다. 나는이 ID들을 해시하는 것에 대해 생각하고 있었고, 그래서 그들은 어떻게해서도 내 RethinkDB 테이블에있는 다른 ID들처럼 보이게 만들 것이다. 여기서 얻으려고하는 것은 동일한 데이터를 다시 병합하려는 시도에서 dups를 피하는 것이지만 원래의 정수를 ID로 유지하는 것은 생성 된 ID를 RethinkDB의 테이블에 직접 저장하여 이상하게 느껴집니다.RethinkDB는 자동 ID를 어떻게 생성합니까?

그럴 수 있습니까? RethinkDB는 자동 ID를 어떻게 생성합니까? 그리고 나는 이것을 정확하게 접근하고 있습니까?

답변

3

RethinkDB는 128 비트 UUID (기본적으로 해시 된 정수)의 문자열 인코딩을 사용합니다.

문자열 형식은 다음과 같습니다. "HHHHHHHH-HHHH-HHHH-HHHH-HHHHHHHHHHHH"모든 'H'는 128 비트 정수의 16 진수입니다. 문자 0-9 및 a-f (소문자)가 사용됩니다.

기존 정수에서 이러한 UUID를 생성하려면 정수를 먼저 해시하는 것이 좋습니다. 이렇게하면 전체 키 공간에 균등하게 분배됩니다 (sharding가 쉬워지며 핫스팟을 피할 수 있습니다). 두 번째 단계로 위와 같은 형식의 문자열로 해시 값을 형식화해야합니다. 숫자가 충분하지 않은 경우 마지막 'H'중 일부를 상수 0으로 두는 것이 좋습니다.

UUID 생성에 대한 세부 정보를 보려면 다음 링크를 참조하십시오. 1. RFC 4122 "UUID (Universally Unique IDentifier) ​​URN 네임 스페이스"http://tools.ietf.org/html/rfc4122 2. RethinkDB의 UUID 생성 및 형식 지정 https://github.com/rethinkdb/rethinkdb/blob/next/src/containers/uuid.cc

관련 문제