Как создаются ObjectIds MongoDB? - PullRequest
       5

Как создаются ObjectIds MongoDB?

22 голосов
/ 28 апреля 2011

Являются ли они несколько случайными?

Я имею в виду .... смогут ли люди разорвать их на части?

Ответы [ 5 ]

37 голосов
/ 28 апреля 2011

Они не случайны и их легко предсказать:

BSID ObjectID является 12-байтовым значением состоящий из 4-байтовой метки времени (секунды с начала эпохи), 3 байта идентификатор машины, двухбайтовый идентификатор процесса и 3-байтовый счетчик

http://www.mongodb.org/display/DOCS/Object+IDs

12 голосов
/ 11 июля 2014

Вот реализация javascript ObjectID MongoDB (http://jsfiddle.net/icodeforlove/rN3zb/)

function ObjectIdDetails (id) {
    return {
        seconds: parseInt(id.slice(0, 8), 16),
        machineIdentifier: parseInt(id.slice(8, 14), 16),
        processId: parseInt(id.slice(14, 18), 16),
        counter: parseInt(id.slice(18, 24), 16)
    };
}

Так что, если их у вас достаточно, они теряют довольно мало информации о вашей инфраструктуре. И вы также знаете даты создания объектадля всего.

IE: сколько у вас серверов и сколько процессов работает на каждом сервере.

11 голосов
/ 28 апреля 2011

Generation

Они обычно генерируются на стороне клиента самим драйвером.Например, в ruby ​​можно использовать BSON :: ObjectID:

Вы также можете создавать свои собственные ObjectIds.Это особенно полезно, если вы хотите использовать бизнес-идентификаторы.

Возможность взлома

  • При использовании сгенерированных драйвером ObjectIds низкое
  • При использовании собственного бизнес-идентификатора немноговыше в зависимости от их предсказуемости (логин, последовательные идентификаторы ...)
2 голосов
/ 31 июля 2018

Драйверы базы данных MongoDB по умолчанию генерируют идентификатор ObjectID, который присваивается полю _id каждого документа. Во многих случаях ObjectID может использоваться как уникальный идентификатор в приложении.

ObjectID - это 96-битное число, составленное следующим образом:

4-байтовое значение, представляющее секунды с начала эпохи Unix (которые не будут исчерпаны до 2106 года)

3-байтовый идентификатор машины (обычно получаемый из MAC-адреса),

2-байтовый идентификатор процесса и

3-байтовый счетчик, начиная со случайного значения.

0 голосов
/ 29 ноября 2018

Из официального документа MongoDB ссылки
он показывает:

ObjectId
ObjectIds небольшие, вероятно уникальные, быстро генерируемые и упорядоченные.Значения ObjectId состоят из 12 байтов, где первые четыре байта являются меткой времени, которая отражает создание ObjectId.В частности:

4-байтовое значение, представляющее секунды с начала Unix,
5-байтовое случайное значение и
3-байтовый счетчик, начиная со случайного значения.
В MongoDB каждый документ, хранящийся в коллекции, требует уникального поля _id, которое действует как первичный ключ.Если во вставленном документе пропущено поле _id, драйвер MongoDB автоматически создает ObjectId для поля _id.

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