Подтвердить что ты не робот

Как создать уникальный идентификатор объекта в mongodb

Когда я использую Mongodb с Java, я хочу сгенерировать Object ID у клиентов. Однако, прежде чем вставить запись, я сначала должен запросить mongodb, чтобы убедиться, что идентификатор, сгенерированный методом ObjectId(), уникален. Есть ли способ, с помощью которого я могу генерировать уникальный идентификатор объекта без одновременного доступа к mongodb?

4b9b3361

Ответ 1

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

Все, что вам нужно сделать, это убедиться, что вы всегда создаете новый идентификатор объекта, а не повторно используете его.

Ответ 2

Вы можете генерировать ObjectId на клиенте без консультации с базой данных. Такой идентификатор будет уникальным (вам придется пробовать чертовски сложно получить две идентичные идентификаторы объектов).

ObjectId id = new ObjectId();

// or this
ObjectId id = ObjectId.get();

Ответ 3

Начиная с MongoDB Java Driver 3.3.0, существуют следующие способы создания ObjectIds.

Использование конструктора без параметров: Предоставляет уникальный ObjectId

1. ObjectId id1 = new ObjectId(); //Generates unique id 

    1.1. ObjectId id2 = ObjectId.get(); //Calls new ObjectId();

Использование параметризованных конструкторов: Параметры влияют на уникальность ObjectId

2. public ObjectId(byte[] bytes) // Receives a byte array of size 12.

3. public ObjectId(String hexString) //Receives a String that is a hexadecimal representation of 12 bytes.

4. public ObjectId(Date date) // Receives a Date object

5. public ObjectId(Date date, int counter) //Receives date and a counter

6. public ObjectId(Date date,
            int machineIdentifier,
            short processIdentifier,
            int counter) //Receives Date, MachineId, PID and counter.

7. public ObjectId(int timestamp,
            int machineIdentifier,
            short processIdentifier,
            int counter) //Receives Epoch time in sec, MachineId, PID and counter.

Общие сведения о ObjectId:

ObjectId состоит из 12 байтов, разделенных следующим образом:

               ObjectID layout

0   1   2   3   4   5   6   7   8   9   10  11

|time          |machine    |pid    |inc      |