Что лучше использовать в Node? 128-битный (uuid) или 7-битный (shorttid) генератор уникальных идентификаторов?
Я сейчас пользуюсь uuid
пакет npm для генерации уникальных идентификаторов для элементов моей графовой базы данных в моем node.js
приложение.
Он генерирует RFC-совместимые 128-битные идентификаторы длиной, например,
6e228580-1cb5-11e8-8271-891867c15336
В настоящее время я думаю перейти к shortid
пакет npm, который выполняет аналогичную работу, но генерирует 7-битные длинные идентификаторы:
PPBqWA9
Мои запросы к базе данных уже длинные, и я хочу сократить их, поэтому я рассматриваю переход от uuid
в shortid
,
Однако, вопрос: я понимаю, что 128-битный UUID-генератор, соответствующий стандарту, гарантирует, что он будет уникальным. Как насчет 7-битного? Я понимаю, что может обеспечить около 78364164096
уникальные возможности, что неплохо, но у меня уже есть около 50M уникальных объектов в моей БД, каждый из которых имеет уникальный индекс, поэтому мне просто любопытно, сможет ли этот алгоритм действительно генерировать уникальный идентификатор, учитывая, что 78364164096 только 1350 раз больше, чем 50000.
Есть идеи? Должен ли я использовать 7-битный или 128-битный идентификатор?
1 ответ
Я буду принимать более короткие идентификаторы, предоставленные shortid
пакет должен быть полным 56 бит длиной. Но, скорее всего, они занимают 56-битный пробел (7 байт), но только что-то вроде 42-битной полезной нагрузки.
И 56-битные, и 128-битные идентификаторы подвержены коллизии. Разница заключается в вероятности столкновения. Я думаю, что 56-битный требует, чтобы вы могли обрабатывать коллизии, так что в итоге вы получите более сложный код. 128-разрядное вряд ли приведет к коллизиям до такой степени, что их вообще не рассматривают.
Ради простоты и безопасности я бы выбрал проверенное временем 128-битное.