Как создаются объекты MongoDB ObjectIds?

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

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

Ответы

Ответ 1

Поколение

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

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

ломкость

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

Ответ 2

Они не являются случайными и могут быть легко предсказаны:

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

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

Ответ 3

Здесь выполняется 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: сколько серверов у вас есть и сколько процессов работает на каждом сервере.