Каковы шансы для пожарного магазина сгенерировать два одинаковых случайных ключа? - PullRequest
0 голосов
/ 19 января 2019

Я работаю над случайными ключами проекта и хранилища, где это важно в этом сценарии, поэтому мой вопрос: каковы шансы для хранилища данных на базе Firebase или базы данных в реальном времени генерировать две или более идентичных случайных величины?

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Хотя ответ Гастона Сайлена на 100% верен в отношении нажатой клавиши из базы данных Firebase в реальном времени, я постараюсь добавить еще несколько деталей.

При использовании метода push () DatabaseReference *1004*, он генерирует ключ, который имеет временную составляющую, поэтому теоретически два события могут происходить в течение одной миллисекунды, но существует астрономически малая вероятность того, что два пользователя смогут сгенерировать ключ в один и тот же момент и с одинаковой случайностью.Также обратите внимание, что эти ключи генерируются полностью на клиенте без консультации с сервером Firebase.Если вам интересно, вот алгоритм , который генерирует эти ключи .В конце я могу сказать вам, что я не слышал о человеке, который до сих пор сообщал о проблеме с коллизиями ключей.

Так что в отличие от ключей базы данных Fireabase в реальном времени, идентификаторы Cloud Firestore фактически являются случайными.Там нет времени компонент включен.Этот встроенный генератор уникальных идентификаторов, который используется в Firestore при вызове методов add () CollectionReference или метода document () CollectionReference без передачи каких-либо параметров, генерирует случайные и крайне непредсказуемые идентификаторы, что предотвращает попадание в определенные горячие точки в серверной инфраструктуре.Это также причина, по которой нет порядка, если вы проверяете документы в коллекции в консоли Firebase.Столкновения идентификаторов в этом случае невероятно маловероятны, и вы можете / должны предположить, что они будут полностью уникальными.Вот для чего они были созданы.Что касается алгоритма, вы можете проверить ответ Фрэнка ван Пуффелена из этого поста .Так что вам не нужно беспокоиться об этих идентификаторах.

0 голосов
/ 19 января 2019

Согласно этой ссылке в блоге: 2 ^ 120 способов обеспечения уникальных идентификаторов

Как генерируются push-идентификаторы

Push-идентификаторы - это строковые идентификаторы, которые генерируются на стороне клиента.Они представляют собой комбинацию метки времени и некоторых случайных битов.Временная метка гарантирует, что они упорядочены в хронологическом порядке, а случайные биты гарантируют, что каждый идентификатор уникален, даже если тысячи людей создают идентификаторы push одновременно.

Что такое идентификатор Push?

Идентификатор push содержит 120 бит информации.Первые 48 битов представляют собой временную метку, которая уменьшает вероятность коллизии и позволяет последовательно создавать идентификаторы push для сортировки в хронологическом порядке.За меткой времени следует 72 бита случайности, что гарантирует, что даже два человека, создающие идентификаторы push-сообщений в одну и ту же миллисекунду, вряд ли будут генерировать идентичные идентификаторы.Одно предостережение от случайности заключается в том, что для сохранения хронологического упорядочения, если клиент создает несколько push-идентификаторов за одну и ту же миллисекунду, мы просто «увеличиваем» случайные биты на единицу.

Чтобы превратить наши 120 битов информации (отметка времени + случайность) в идентификатор, который можно использовать в качестве ключа Firebase, мы в основном base64 кодируем его в символы ASCII, но мы используем модифицированный алфавит base64, который гарантирует, что идентификаторы будут по-прежнему правильно сортироваться при лексикографическом порядке (поскольку ключи Firebase упорядочены лексикографически).

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