2013-11-21 4 views
0

Я хочу инициировать осколки. как вы знаете, осколочный ключ очень важен. Я нашел, MongoDB doesn't ensure unique _id field values when using a shard key other than _id.Поддерживает ли MongoDB уникальные значения значений _id при использовании сложного ключа осколка с _id

В наших коллекциях имя пользователя shoud be shard key. Если я создаю сложный осколочный ключ и использую _id в качестве второй части ключа осколка, делает ли mongoDB уникальность _id?

+1

Он будет уникальным, но не является специфическим _id – Sammaye

ответ

1

MongoDB не обеспечивает уникальное _id поля через осколки при использовании в качестве ключа соединения.

The documentation состояния:

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

Итак, если вы хотите, чтобы манго обеспечивал уникальность электронной почты, просто используйте это письмо как ключ осколка.

Адрес электронной почты имеет некоторую случайность, что хорошо (_id has some predictability), но я предлагаю вам использовать поле электронной почты как hashed shard key.

+0

В вашем примере, должен ли ключ осколка с использованием 'email' быть уникальным? благодаря – mils

0

MongoDB обеспечивает уникальность для всех полей составного ключа. Но я не уверен, что это вы ищете. Что произойдет, если у вас есть эти документы? {_id: 12345, email: "[email protected]"} и {_id: 4567, email: "[email protected]"}. Осколок ключа уникален, но у вас есть тот же адрес электронной почты дважды.

Если вы ищете уникальное письмо по всем осколкам, вы можете попробовать создать прокси-коллекцию с уникальным индексом.

You have more information here

+0

Указанная вами ссылка противоречит вашему ответу: «MongoDB обеспечит уникальность всей комбинации клавиш и ** не для конкретного компонента ** ключа осколка ". @ Комментарий Sammaye - правильный ответ. – ixe013

+0

Возможно, мой английский недостаточно хорош, но я не вижу, что вы говорите. Я понимаю, что уникальность в оштукатуренных ключах гарантируется сочетанием обоих полей, поэтому в моем примере есть два уникальных осколочных ключа. Но что произойдет, если вы не хотите дублировать электронную почту? – rubenfa

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