2017-04-06 4 views
2

분산 된 방식으로 고유 ID를 생성해야합니다. 일부는 서버 쪽이고 다른 쪽은 클라이언트 쪽입니다. 서버 측 프로그래밍 언어는 클라이언트 측이 자바 스크립트 인 반면 루비와 파이썬이 될 수 있습니다. 각 언어별로 simpleflake 라이브러리를 사용하려고 계획 중입니다.다른 언어로 생성 된 simpleflake id는 일관성이 있습니까?

ID가 충돌하지 않는다고 가정 할 수 있습니까?

또는 다른 패키지의 구현 세부 사항 때문에 자주 충돌 할 수 있습니까?

미리 감사드립니다.

-Amit

답변

1

파이썬의 Simpleflake과 노드 .js의 simpleflakes은 실제로 동일한 출처 (파이썬의 구현)에서 파생됩니다. 둘 다 64 비트 ID를 생성하고 둘 다 생성 된 ID는 서로 호환됩니다.

간단한 플레이크는 formula

flake = (int((time.time() - 946702800) * 1000) << 23) + random.SystemRandom().getrandbits(23) 

로서 이전 답변을 지적으로 ID를 생성하고, 충돌 확률 (이것은 밀리 41 비트 타임 스탬프를 충돌 확률 정말 낮은이고 확률은 임의로 생성됨 23 비트 정수).

그러나 위에서 언급 한 두 가지 구현의 차이점을 알고 있어야합니다. simpleflakes node.js 라이브러리는 2000-01-01T00 : 00 : 00.000Z에 신기원을 수정합니다. 반면 Python 구현은 2000-01-01T05 : 00 : 00.000Z에 신기원을 가정합니다.

2

나는 128 비트 대신 64

의 핵심 성분 인을 사용하지만 나는 Simpleflake 자체를 사용하지 않은, 그러나 년 동안 비슷한 방식을 사용 된 비트의 대부분이 무작위입니다. 따라서 라이브러리가 타임 스탬프 부분에 약간 다른 비트 수를 선택하거나 다른 세밀도를 선택하더라도 충돌 가능성은 낮습니다. 물론 이러한 경우에는 데이터베이스의 속도 향상이 줄어 듭니다.

일부 Simpleflake 구현은 "표준"이고 다른 구현은 직선 포트이며 호환성과 특성을 유지한다고 상상합니다. 그렇지 않다면, Simpleflake을 사용하여 부끄러워하십시오.

+0

감사합니다. 또한 언어별로 라이브러리를 사용하는 것이 안전하다고 가정 할 것입니다. 더 많은 정보를 찾으면 여기에 게시 할 것입니다. –