Mongodb: идентификатор объекта как короткий первичный ключ в коллекции - PullRequest
6 голосов
/ 25 апреля 2011

Как лучше использовать objectId, сгенерированный MongoDB. Я не опытный пользователь, но до сих пор я создал отдельный идентификатор для своего объекта (userid, postid) и т. Д., Потому что идентификатор объекта слишком длинный и делает URL уродливым, если используется в качестве основного идентификатора. Я сохраняю _id нетронутым, так как он помогает индексировать и т. Д. Мне было интересно, какая из стратегий лучше, чтобы можно было использовать mongo objectId как более удобный для пользователя и легко запоминающийся ключ. Я прочитал, что ключ был комбинацией даты и т. Д., Поэтому любая часть может использоваться для этой цели уникально в коллекции.

спасибо,
BSR /

Ответы [ 2 ]

3 голосов
/ 26 апреля 2011

Если у вас есть существующий идентификатор (, скажем, из существующего набора данных ), тогда вполне нормально переопределить _id с тем, который у вас есть.

... сохраняйте _id без изменений, поскольку это помогает индексировать и т. Д.

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

Таким образом, большинство RDBM предоставляют идентификатор "автоинкремента".Это хорошо для небольших наборов данных, но очень плохо с точки зрения масштабируемости.Если вы пытаетесь вставить данные на 20 серверов одновременно, как сохранить «автоинкремент» без изменений?

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

Мне было интересно узнать о какой-либо лучшей стратегии, чтобы можно было использовать mongo objectId как более удобный для URL и легко запоминающийся ключ

Итак, проблема в том, что «легко запоминающийся» идентификатор на самом деле не связан с «хорошо масштабируемой базой данных».Когда у вас есть миллиард документов, идентификаторы на самом деле не «легко запоминаются».

Таким образом, вы должны найти компромисс здесь.Если у вас есть таблица, которая может стать очень большой, я предлагаю использовать ObjectId.Если у вас сравнительно небольшая таблица, которая не обновляется часто (например, таблица «поиска»), вы можете создать собственное автоинкремент.

Выбор действительно за вами.

0 голосов
/ 25 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...