Краткий ответ
Просто чтобы добавить прямой ответ на ваш первоначальный вопрос: ДА, если вы используете генерацию идентификатора объекта BSON, тогда для большинства драйверов идентификаторыпочти наверняка будут уникальными среди коллекций.Ниже показано, что означает «почти наверняка».
Длинный ответ
Идентификаторы объектов BSON, сгенерированные драйверами Mongo DB, с большой вероятностью будут уникальными среди коллекций.Это происходит главным образом из-за последних 3 байтов идентификатора, который для большинства драйверов генерируется через статический инкрементный счетчик.Этот счетчик не зависит от коллекции;это глобально.Например, драйвер Java использует случайно инициализированный статический AtomicInteger.
Так почему же в монго-документах они говорят, что идентификаторы «очень вероятно» будут уникальными, вместо того, чтобы прямо сказать, что они будут уникальными?Возможны три варианта, когда вы не получите уникальный идентификатор (пожалуйста, дайте мне знать, если их будет больше):
Перед этим обсуждением напомним, что идентификатор объекта BSON состоит из:
[4 байта секунды с начала эпохи, 3 байта машинного хэша, 2 байта идентификатора процесса, 3 байта счетчик]
Вот три варианта, поэтому вы сами решаете, какова вероятность получения дублирования:
1) Переполнение счетчика: в счетчике 3 байта.Если вам случится вставить более 16 777 216 (2 ^ 24) документов за одну секунду на одном и том же компьютере в одном и том же процессе, вы можете переполнить увеличивающиеся байты счетчика и получить два идентификатора объекта, которые совместно используют одно и то же время:, process и значения счетчика.
2) Счетчик без приращения: некоторые драйверы Mongo используют случайные числа вместо приращения чисел для байтов счетчика.В этих случаях существует вероятность 1 / 16,777,216 генерирования неуникального идентификатора, но только в том случае, если эти два идентификатора генерируются в одну и ту же секунду (т. Е. До того, как временной отрезок идентификатора обновляется до следующей секунды), в ту же секундумашина, в том же процессе.
3) Хэш машины и процесса с одинаковыми значениями.Значения идентификатора компьютера и идентификатора процесса могут в некоторых крайне маловероятных сценариях соответствовать одним и тем же значениям для двух разных компьютеров.Если это произойдет, и в то же время два счетчика на двух разных компьютерах в течение одной и той же секунды генерируют одно и то же значение, то в итоге вы получите дубликат ID.
Это три сценарияследить за.Сценарии 1 и 3 кажутся крайне маловероятными, а сценарий 2 можно полностью избежать, если вы используете правильный драйвер.Вы должны будете проверить источник драйвера, чтобы знать наверняка.