스노플레이크 ID
1971593279447236608 | |
---|---|
스노플레이크 ID | |
다른 이름 | 트위터 스노플레이크 X 스노플레이크 |

스노플레이크 ID(Snowflake ID) 또는 스노플레이크(snowflakes)는 분산 컴퓨팅에 사용되는 고유 식별자의 한 형태이다. 이 형식은 트위터(현 X)에 의해 만들어졌으며 트윗 ID에 사용된다.[1] 모든 눈송이가 고유한 구조를 가지고 있다고 널리 알려져 있어 "스노플레이크 ID"라는 이름을 갖게 되었다. 이 형식은 디스코드와 인스타그램을 포함한 다른 회사들에서도 채택되었다. 마스토돈 소셜 네트워크는 수정된 버전을 사용한다.
형식
[편집]스노플레이크는 이진수로 64 비트이다. (부호 있는 정수에 맞추기 위해 63비트만 사용된다.) 처음 41비트는 선택된 에포크 이후 밀리초를 나타내는 타임스탬프이다. 다음 10비트는 충돌을 방지하는 기계 ID를 나타낸다. 추가 12비트는 동일한 밀리초에 여러 스노플레이크를 생성할 수 있도록 기계당 시퀀스 번호를 나타낸다. 최종 숫자는 일반적으로 십진수로 직렬화된다.[2]
스노플레이크는 생성된 시간을 기반으로 하기 때문에 시간순으로 정렬할 수 있다.[2] 또한, 스노플레이크가 생성된 시간은 스노플레이크로부터 계산할 수 있다. 이는 특정 날짜 이전 또는 이후에 생성된 스노플레이크(및 관련 객체)를 가져오는 데 사용될 수 있다.[3]
오프셋 | 옥텟 | 0 | 1 | 2 | 3 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
옥텟 | 비트 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
0 | 0 | 0 | 타임스탬프 - 첫 31비트 | |||||||||||||||||||||||||||||||
4 | 32 | 타임스탬프 - 마지막 10비트 | 기계 ID | 기계 시퀀스 번호 |
예시
[편집]2022년 6월 @위키백과가 작성한 트윗[4]은 스노플레이크 ID 1541815603606036480를 가지고 있다. 이 숫자는 이진수 00 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000로 변환될 수 있으며, 파이프 기호는 ID의 세 부분을 나타낸다.
- 첫 41비트(+1 최상위 0비트)는 십진수로 367597485448로 변환된다. 이 값에 X 에포크 1288834974657 (밀리초 단위의 유닉스 시간)를 더하면,[5] 트윗의 유닉스 시간은 1656432460.105이다: 2022년 6월 28일 16:07:40.105 UTC.
- 중간 10비트 01 0111 1010는 기계 ID이다.
- 마지막 12비트는 모두 0으로 디코딩되며, 이는 해당 밀리초에 해당 기계에서 처리된 첫 번째 트윗임을 의미한다.
사용법
[편집]이 형식은 2010년 6월 트위터에서 처음 발표되었다.[1] 구현상의 어려움으로 인해, 그들은 업데이트를 연말까지 미루었다.[6]
- 트위터는 트윗, 다이렉트 메시지, 사용자, 목록 및 API를 통해 사용 가능한 기타 모든 객체에 스노플레이크 ID를 사용한다.[7]
- 10비트 기계 ID 필드는 주어진 구현에 따라 하위 필드로 더 분할될 수 있다. 예를 들어, 스칼라의 원본 트위터 스노플레이크 라이브러리 아카이브 버전은 이를 5비트 데이터센터 ID와 5비트 워커 ID로 분할한다.[8]
- 디스코드도 스노플레이크를 사용하며, 에포크는 1420070400000으로 설정되어 2015년의 0초에 해당한다.[3]
- 인스타그램은 수정된 버전을 사용하며, 타임스탬프에 41비트, 샤드 ID에 13비트, 시퀀스 번호에 10비트를 할당한다.[9]
- 마스토돈의 수정된 형식은 유닉스 에포크를 사용하므로 밀리초 단위 타임스탬프에 48비트가 할당된다. 나머지 16비트는 시퀀스 데이터용이다.[10]
같이 보기
[편집]각주
[편집]- ↑ 가 나 King, Ryan (2010년 6월 1일). “Announcing Snowflake”. 《blog.twitter.com》. Twitter. 2021년 1월 18일에 확인함.
- ↑ 가 나 “twitter-archive/snowflake at b3f6a3c6ca”. 《깃허브》. 2012년 10월 1일. 2021년 1월 18일에 확인함.
- ↑ 가 나 “API Reference”. 《Discord Developer Portal》. Discord. 2021년 1월 18일에 확인함.
- ↑ Wikipedia. “53 years ago today, members of the LGBTQI+ community began protesting in New York City in response to a police raid of the Stonewall Inn, a popular gay bar. The riots were a transformative event in the 20th century fight for LGBTQI+ rights in the US. (1/2)” (트윗). |날짜=가 없거나 비었음 (도움말)
- ↑ “2019-08-03: TweetedAt: Finding Tweet Timestamps for Pre and Post Snowflake Tweet IDs”. 《2019-08-03》.
- ↑ Siegler, MG (2010년 10월 12일). “Tweet IDs About To Get Jumbled In A Blizzard As Snowflake Is Set To Roll Live”. 《TechCrunch》. 2021년 1월 18일에 확인함.
- ↑ “Twitter IDs”. 《Twitter Developer》. Twitter. 2021년 1월 20일에 확인함.
- ↑ Source Code 《twitter-archive/snowflake》, Twitter, 2010년 8월 14일, 2025년 5월 24일에 확인함
- ↑ “Sharding & IDs at Instagram” (영어). 《Instagram Engineering》. 2016년 5월 2일. 2021년 1월 18일에 확인함.
- ↑ Source Code 《mastodon/mastodon》, Mastodon, 2022년 11월 11일, 2022년 11월 11일에 확인함
외부 링크
[편집]- (영어) 트위터의 참조 구현 - 깃허브
- 스노플레이크 ID 생성기 도구