Ответ 1
Почему по умолчанию _id
шестнадцатеричная строка в 24 символа?
Уникальный идентификатор по умолчанию, сгенерированный как первичный ключ (_id
) для документа MongoDB, представляет собой ObjectId. Это 12-байтовое двоичное значение, которое часто представляется как шестнадцатеричная строка 24 символа, и один из стандартных типов полей, поддерживаемых спецификацией MongoDB BSON.
12 байтов ObjectId создаются с использованием:
- значение в 4 байта, представляющее секунды с эпохи Unix
- 3-байтовый идентификатор машины
- двухбайтовый идентификатор процесса
- 3-байтовый счетчик (начиная со случайного значения)
Какова важность ObjectId?
ObjectIds (или аналогичные идентификаторы, сгенерированные в соответствии с формулой GUID) позволяют независимо создавать уникальные идентификаторы в распределенной системе.
Возможность самостоятельного создания уникального идентификатора становится очень важной, поскольку вы масштабируетесь до нескольких серверов приложений (или, возможно, нескольких узлов базы данных в кластере sharded cluster). Вы не хотите иметь узкое место в центре координации, например, счетчик последовательности (например, как вы могли бы использовать для автоматического прироста первичного ключа), и вы захотите вставить новые документы без риска того, что новый идентификатор окажется дублировать.
ObjectId обычно генерируется вашим клиентом MongoDB , но также может быть сгенерирован на сервере MongoDB, если ваш драйвер клиента или код приложения или еще не добавлены a _id
.
Нужно ли использовать ObjectId по умолчанию?
Нет. Если у вас есть более подходящий уникальный идентификатор, вы всегда можете указать свое собственное значение для _id
. Это может быть либо одно значение, либо составное значение с использованием нескольких полей.
Основные ограничения на значения _id
заключаются в том, что они должны быть уникальными для коллекции, и вы не можете обновить или удалить _id
для существующего документа.