Уникальные идентификаторы, используемые X (ранее Twitter)
Snowflake ID , или снежинки , — это форма уникального идентификатора, используемого в распределенных вычислениях . Формат был создан Twitter (теперь X) и используется для идентификаторов твитов. [1] Широко распространено мнение, что каждая снежинка имеет уникальную структуру, поэтому они получили название «snowflake ID». Формат был принят другими компаниями, включая Discord и Instagram . Социальная сеть Mastodon использует модифицированную версию.
Формат
Снежинки — это 64 бита в двоичном формате. (Только 63 бита используются для размещения в знаковом целом числе .) Первые 41 бит — это временная метка , представляющая миллисекунды с выбранной эпохи . Следующие 10 бит представляют идентификатор машины, предотвращая конфликты. Еще двенадцать бит представляют порядковый номер для каждой машины, что позволяет создавать несколько снежинок за одну миллисекунду. Конечное число обычно сериализуется в десятичном формате. [2]
Снежинки можно сортировать по времени, поскольку они основаны на времени их создания. [2] Кроме того, время создания снежинки можно вычислить по самой снежинке. Это можно использовать для получения снежинок (и связанных с ними объектов), которые были созданы до или после определенной даты. [3]
Пример
Твит, опубликованный @Wikipedia в июне 2022 года [4] , имеет идентификатор снежинки 1541815603606036480. Число можно преобразовать в двоичный код как 00 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000 , с символами вертикальной черты, обозначающими три части идентификатора.
Первые 41 бит (+ 1 верхний нулевой бит) преобразуются в десятичное число как 367597485448. Добавьте значение к X эпохе 1288834974657 (в миллисекундах времени Unix ), [5] поэтому время Unix твита равно 1656432460.105 : 28 июня 2022 г. 16:07:40.105 UTC.
Средние 10 бит 01 0111 1010 — это идентификатор машины.
Последние 12 бит декодируются в нули, что означает, что этот твит является первым твитом, обработанным машиной в данную миллисекунду.
Использование
Формат был впервые анонсирован X/Twitter в июне 2010 года. [1] Из-за проблем с реализацией они отложили выпуск обновления до конца года. [6]
X использует идентификаторы «снежинка» для постов, прямых сообщений, пользователей, списков и всех других объектов, доступных через API . [7]
Discord также использует снежинки, их эпоха установлена на первую секунду 2015 года. [3]
Instagram использует модифицированную версию формата с 41 битом для временной метки, 13 битами для идентификатора сегмента и 10 битами для порядкового номера. [8]
Модифицированный формат Mastodon имеет 48 бит для временной метки уровня миллисекунды, поскольку он использует эпоху UNIX . Оставшиеся 16 бит предназначены для данных последовательности. [9]
^ ab King, Ryan (1 июня 2010 г.). «Анонс Snowflake». blog.twitter.com . Twitter . Получено 18 января 2021 г. .
^ ab "twitter-archive/snowflake at b3f6a3c6ca". GitHub . 1 октября 2012 г. Получено 18 января 2021 г. .
^ ab "API Reference". Discord Developer Portal . Discord . Получено 18 января 2021 г. .
^ @Wikipedia (28 июня 2022 г.). «53 года назад в этот день члены сообщества ЛГБТКИ+ начали протестовать в Нью-Йорке в ответ на полицейский рейд в Stonewall Inn, популярном гей-баре. Беспорядки стали преобразующим событием в борьбе за права ЛГБТКИ+ в США в XX веке. (1/2)» ( Твит ) – через Twitter .
^ "2019-08-03: TweetedAt: Поиск временных меток твитов для идентификаторов твитов до и после Snowflake". 2019-08-03 .
^ Siegler, MG (12 октября 2010 г.). «Идентификаторы твитов могут перепутаться в метели, поскольку Snowflake готовится к запуску в прямом эфире». TechCrunch . Получено 18 января 2021 г.
^ "Twitter IDs". Разработчик Twitter . Twitter . Получено 20 января 2021 г. .
^ "Sharding & IDs at Instagram". Instagram Engineering . 2 мая 2016 г. Получено 18 января 2021 г.
^ Исходный код mastodon/mastodon, Mastodon, 11 ноября 2022 г. , получено 11 ноября 2022 г.