2015-06-25 3 views
0

Если у меня есть осколоченный кластер MongoDB с несколькими экземплярами MongoS, будет ли мой ObjectID в _id быть согласованным с любым MongoS, на который я пишу?Уникальность уникального объекта MongoDB в закрытом кластере

Например, если я пишу некоторые данные из MongoS # 1, а _id поднимается нормально, если я тогда пишу, используя MongoS # 2, эти _id также будут подниматься в соответствии с другой записью?

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

Какая рекомендация здесь?

+0

Простой ответ будет да. Монго поддерживает уникальность поля _id через скошенный кластер. –

ответ

0

Как генерируется ObjectId, вы получите полное представление о вашем запросе.

если вы печатаете это в Монго консоли

новый ObjectId()

вы увидите значение выборки ObjectId как

ObjectId("558bf61f9f49f303f72dd59b") 

Теперь, позволяет отдохнуть и посмотреть как монго порождает это. 558bf61f 9f49f3 03f7 2dd59b

  1. Здесь первые 8 символов (4 байта) представляет собой количество секунд (не миллисекунд) в качестве временной метки.
  2. Следующие 3 байта - это машина, идентифицирующая.
  3. следующие 2 байта - это идентификатор процесса.
  4. и, наконец, 3 байта - это случайное значение.

http://api.mongodb.org/libbson/current/bson_oid_t.html

Итак, наверняка, однако mongos вы связаны с, как проходит время на нем будет в порядке возрастания только (из первого пункта) остальные пункты гарантировать, что его всегда уникальный номер. Надеюсь, он уточнит ваши сомнения.

- $

+0

Дело в том, что я не думаю, что это адекватно объясняет, как идентификатор машины и идентификатор процесса, полученный. Является ли это клиентским приложением, машиной процесса mongos, основным из которых является его очертание? Просто задался вопросом, было ли это исправлено в настройке кластерного кластера по-другому, чтобы сохранить некоторую согласованность. – Theramist

+0

правда, однако мое объяснение отвечает на ваш вопрос о восходящем первичном ключе (_id). хотя вы можете наблюдать, например, вы запускаете java-программу и делаете массовые вставки, тогда идентификатор машины и идентификатор процесса по всем записям всегда одинаковы, только его временная метка и случайное число различаются. Одно наблюдение, что processId в поле НЕ совпадает с идентификатором процесса Java-кода. –

+0

Хорошо. Я думаю, что сделаю несколько экспериментов с несколькими процессами mongos и несколькими клиентскими подключениями и посмотрю, могу ли я определить, откуда берутся идентификатор machineID и processID. Главное, что я пытаюсь достичь здесь, - это точный способ определить, где последнее обновление произошло с несколькими соединениями и читать дальше с этой точки. Если бы я мог полагаться на _id, который бы помог, но похоже, что мне придется найти другое решение. – Theramist

Смежные вопросы