Генерация удобных идентификаторов в MongoDb - PullRequest
6 голосов
/ 03 марта 2012

Есть проект, над которым я работаю. Это похоже на социальную сеть, где у нас могут быть пользователи, сообщения, фотографии и т. Д., А затем возникла эта проблема. Мы привыкли к Mysql и «почти магическому» полю автоинкремента, и теперь мы не можем больше на это рассчитывать. Я знаю, что объект _id в Mongo предоставляет простой способ идентификации документа, поскольку он гарантирует уникальность. Но ключ не удобен для пользователя, и это то, что нам нужно, поэтому мы можем сделать URL-адреса, такие как:

http://website.com/posts/{post_id}
http://website.com/{user_id}

Я разработал решение, но я не думаю, что это лучший способ сделать это. Сначала я создаю таблицу mysql только с одним столбцом. В этом столбце хранится user_id, и это поле с автоинкрементом. Для каждой новой записи на монго я вставляю новую строку в эту таблицу mysql и получаю user_id с функцией «LAST_INSERT_ID», теперь я могу вставить свои данные в свою коллекцию монго с числовым идентификатором. И еще одним преимуществом является то, что я могу стереть свою таблицу MySQL, скажем, после миллиона строк, потому что идентификаторы уже хранятся в Монго. Я делаю это неправильно?

Ответы [ 3 ]

8 голосов
/ 03 марта 2012

Почему бы не использовать слагов для сообщений и имен пользователей для пользователей? Это должно быть читаемым человеком.

7 голосов
/ 03 марта 2012

Во-первых, я не вижу никакой пользы от использования произвольного числа с автоматическим приращением по сравнению с сгенерированным идентификатором mongo.Мало того, что опять-таки не просто произвольный идентификатор, но вы должны поддерживать последовательность.

Тем не менее, почему бы не позволить Монго управлять идентификатором и использовать другой уникальный идентификатор для ваших URL-адресов.Если у ваших пользователей есть «имя пользователя», я предполагаю, что вы уже убедились, что он уникален для всей коллекции.Просто запросите по этому уникальному свойству, а не по идентификатору.

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

5 голосов
/ 05 марта 2012

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

http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb

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