Автогенерированный идентификатор BSON, который хранится в поле _id каждого документа, является ли он идентификатором GUID? В документации говорится, что он «скорее всего уникален», поэтому я немного смущен. Почему они используют идентификатор, который не гарантированно уникален?Являются ли идентификаторы GUID Mongodb ObjectIds?
ответ
Он уникален в большинстве требований и состоит из отметки времени, уникального идентификатора машины (хеш машинного узла), идентификатора процесса и последнего номера инкремента. http://docs.mongodb.org/manual/reference/object-id/
ObjectId поясняется в документе here. Это не «гарантировано», чтобы быть уникальным, потому что MongoDB не обеспечивает уникальность, чтобы сэкономить время. Он просто полагает, что алгоритм сложного генерации, вероятно, никогда не будет создавать два идентичных объекта ObjectIds в одном хранилище данных. Так что технически это не GUID, но в значительной степени хороший.
Его единство основано на вероятности. В отличие от @mattexx Ответ:
Это не «гарантировано», чтобы быть уникальным, потому что MongoDB не обеспечивает уникальность, чтобы сэкономить время.
MongoDB НЕ применять uniqness на ObjectId
, это на самом деле имеет уникальный индекс на _id
поле. Говоря о сбережении времени, ObjectId
является историческим, так как он был разработан в те дни, когда MongoDB не делал никаких записей и нуждался в 99% вероятности вставить новую уникальную запись без клиента, ожидающего ack (ObjectIds создаются с клиентской стороны).
Они не являются GUID, однако они, как говорит Ася, гарантируют высокий уровень юнилинга.
До тех пор, пока время не перемещается назад, вероятность 99% будет уникальной навсегда. Хорошо, как говорит @Devesh, есть 1, 1 триллион («не сделали математику»), шанс дублирования GUID, но, опять же, я не думаю, что вы скоро достигнете этой вероятности.
Вероятность столкновения ID составляет теоретически достаточно близко к нулю, что можно предположить для типичных веб-приложений. Многие системы реального мира (Mongo или нет) полагаются на это свойство GUID, хотя это не будет хорошим предположением для систем безопасности/критически важных систем.
В терминах практических существуют действительно сценарии, где это может пойти не так, если есть неправильная конфигурация или ошибка библиотеки сторонних разработчиков. Те не должны исключать эту концепцию, но важно знать об этих рисках и избегать их там, где это возможно.
Некоторые вопросы good analysis here практических вопросов, которые могут вызвать столкновение. В частности:
Некоторые монгольские драйверы используют случайные числа вместо увеличивающихся чисел для счетчиков байтов. В этих случаях существует вероятность получения уникального идентификатора 1/16,777,216, но только если эти два идентификатора генерируются за одну секунду (т. Е. До временного раздела обновлений ID до следующей секунды), на том же машины, в том же процессе.
- 1. Являются ли GUID опасными?
- 2. MongoDb secureIndex on ObjectIds
- 3. MongoDB ObjectIds экспозиции
- 4. Запрос MongoDB для нескольких ObjectIDs в массиве
- 5. Являются ли идентификаторы узлов постоянными?
- 6. Являются ли идентификаторы соединения SignalR криптографически безопасными?
- 7. Использование UUID вместо ObjectIDs в MongoDB
- 8. MongoDB & web2py: Работа с ObjectIds
- 9. Идентификаторы MongoDB отсортированы по умолчанию, а также являются ли все идентификаторы уникальными или нет?
- 10. Как детерминированные являются .Net GUID?
- 11. ЯВЛЯЮТСЯ идентификаторами GUID?
- 12. Являются ли идентификаторы номеров меньше строк?
- 13. Являются ли идентификаторы процессов неотрицательными в Linux?
- 14. Являются ли идентификаторы элементов массива в java?
- 15. Являются ли Android-идентификаторы действительно неизменными?
- 16. Являются ли метрические идентификаторы рендеринга VMWare стабильными?
- 17. Являются ли идентификаторы Android-устройств Android?
- 18. Являются ли идентификаторы ID процесса процесса unix?
- 19. Являются ли идентификаторы пакета/продукта в WMAppManifest.xml?
- 20. Являются ли идентификаторы соединения SignalR конкретными?
- 21. CSS: являются ли сменные классы и идентификаторы?
- 22. Являются ли рекламные идентификаторы iBeacon уникальными?
- 23. Mongodb/Mongoose: Filling Array of ObjectIds (ссылки)
- 24. Как уменьшить догадки ObjectIDs от MongoDB?
- 25. Сгенерированные последовательные GUID иногда не являются последовательными
- 26. pymongo save embedded objectIds, InvalidDocumentError
- 27. Как использовать $ lookup в mongodb на ObjectIds
- 28. MongoDB $ тянуть значение из массива ObjectIds
- 29. Правильная реализация PUT и ObjectIDs в MongoDB
- 30. MongoDB filter by array of objectIds
гарантированно будет уникальным, по крайней мере, я никогда не видел реального столкновения. Существует много документации о том, что именно закодировано. –
Даже GUID не гарантирует его уникальность, но так, как они формируются, они, вероятно, будут уникальными все время. – Devesh