Я хотел бы генерировать уникальные 64-битные ключи (псевдо) случайным образом для идентификации объектов в нашей модели. Мне нужно, чтобы ключи были настолько уникальными, насколько это возможно (минимизируйте вероятность коллизий, когда любые N ключей используются вместе) для всех пользователей системы.
Обычные GUID пока не обсуждаются, потому что у нас дешевые данные :). Поскольку я не предполагаю, что потребуется более 1 миллиона ключей, используемых в одном и том же контексте, я думаю, что достаточно 64-битного (вероятность коллизии будет около ~ 10e-7).
В качестве дополнительного примечания мне также понадобится схема для свертывания / хеширования этих ключей в один 64-битный ключ, который также должен быть хорошо распределенным / уникальным.
Поскольку в любом случае мне нужна хорошая (хорошо распределенная) функция хеширования, можно ли было бы сложить GUID пополам (возможно, каким-то образом учесть фиксированные биты в GUID)? Или лучше использовать местный ГСЧ? Как бы я посеял ГСЧ, чтобы максимизировать уникальность в пространстве / времени генерации? Как мне понадобится сильный ГСЧ?
Я не особо ищу эффективность (до определенного момента), но мне бы очень хотелось, чтобы вероятности выполнили свое обещание!