Длина идентификатора коллекции в MongoDB

Я новичок в mongodb и переполнении стека.

Я хочу знать, почему идентификатор коллекции mongodb имеет 24 шестнадцатеричных символа? Какова важность этого?

Ответ 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 для существующего документа.