2014-12-27 4 views
0

У меня есть база данных пользователей, у которых есть уникальный идентификатор (Java UUID), чтобы различать их, так как другие данные (имя, IP и фамилия) могут содержать дубликаты. Является ли хорошей идеей установить _id для уникального идентификатора, поскольку это избавит меня от создания и индексирования другого поля и отсутствия бесполезного поля _id.Использовать пользовательское значение _id

+0

Что вы хотите сказать? –

+0

@atishshimpi «Это хорошая идея установить _id на уникальный идентификатор, так как это избавит меня от создания и индексирования другого поля и отсутствия бесполезного поля _id». – user2248702

+0

Это совершенно нормально в MongoDB. – wdberkeley

ответ

2

Это спорная тема, и ее специфика варьируется в зависимости от механизма базы данных. Я буду говорить более широко, предполагая, что механизм базы данных может измениться в более поздний момент времени. Чтобы помочь вам решить, вот некоторые плюсы и минусы для использования UUID как в строке и ID:

Pros:

  • Unique через столы, где данные различны, но схожи по характеру
  • делает перемещение из одного СУБД к другой очень прямо вперед, как ID подряд не является полностью зависит от времени введения

Против:

  • Запрещает строгую кластерную индексацию, поскольку UUID не являются последовательными. Это означает, что когда вы делаете вставку, ваша база данных должна будет перетасовать большое количество страниц памяти, чтобы сохранить порядок (некоторые механизмы базы данных, такие как SQL Server, создают поле «uniquifier», чтобы обойти это, но, в конце концов, стоят так же, как и используя Int в качестве первичного ключа)
    • делает отладку в приложении или файл журнала гораздо более трудным как поле ИНТ легче сравнить/посмотреть на чем UUID
    • присоединяется к таблицам медленнее стихи междунар, верно и для большинство всех реализаций базы данных

Мой личный совет будет использовать Int для у наш идентификатор. Ваши соединения будут быстрее работать с таблицами, а в целом намного легче отлаживать. Конечно, вы все же можете использовать UUID для внешнего ключа, но по мере того, как ваше решение масштабируется, небольшие удобные для чтения значения пригождаются.

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