Обеспечение уникальных сгенерированных ключей для разных таблиц на нескольких машинах - PullRequest
0 голосов
/ 06 июня 2019

Я хочу использовать этот пакет Go https://github.com/bwmarrin/snowflake для генерации первичных ключей int64 для моих таблиц в Postgresql. Если мой сервер приложений работает как минимум на двух компьютерах, как я могу предотвратить создание дубликатов ключей?

1 Ответ

1 голос
/ 06 июня 2019

Таким образом, снежинка предоставляет 63-битное целое число, хранящееся в int64. Согласно документации, вы можете генерировать 4096 уникальных идентификаторов каждую миллисекунду для каждого идентификатора узла. Давайте возьмем реализацию по умолчанию. Это 4096 * 1023 = 40961023 идентификаторов в миллисекунду, и если вы рассчитываете за одну секунду, вы можете генерировать миллиарды уникальных идентификаторов на нескольких узлах, и очень редко будет возникать конфликт.

Так что я думаю, что если вы передадите идентификатор узла в переменной env сервера и сгенерируете идентификаторы на основе этого, вы должны быть в безопасности.

Это также помогает добавить некоторый префикс к идентификатору, основанный на сущности или домене, чтобы вы получили больше энтропии, что уменьшит конфликты еще меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...