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