2012-03-03 19 views
5

Hay un proyecto en el que estoy trabajando. Esto es como una red social en la que podemos tener usuarios, publicaciones, imágenes, etc. y luego surgió este problema. Estamos acostumbrados a Mysql y al campo de autoincremento "casi mágico" y ahora ya no podemos contar con él. Sé que el objeto _id en Mongo ofrece una manera fácil de identificar un documento, ya que garantiza la singularidad. Pero la clave no es fácil de usar y que es lo que necesitamos, por lo que puede hacer URLs como:Generar fáciles de usar identificadores en MongoDB

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

he desarrollado una solución, pero no creo que esta es la mejor manera de hacer esto. Primero creo una tabla mysql con solo una columna. Esta columna almacena el user_id y es un campo de incremento automático. Por cada nuevo registro en mongo insertar una nueva fila de esta tabla MySQL y obtener el user_id con la función "LAST_INSERT_ID", ahora puedo insertar mis datos en mi colección mongo con un ID numérico. Y otra ventaja es que puedo borrar mi mesa MySQL digamos, después de un millón de filas porque los identificadores ya están almacenados en mongo. ¿Lo estoy haciendo mal?

+3

Se espera que los usuarios recuerden un entero? La única persona que conozco que se sale con la que es Randall, de la fama xkcd, y él sólo tiene poco más de 1000. Sólo tiene que utilizar el mongo IDS al usuario de no memorizan todos modos. –

+1

"fácil de usar" significa contenido inteligible y legible para el ser humano. No necesito que los usuarios lo memoricen, pero lo necesito por otros motivos. –

Respuesta

7

En primer lugar, no veo ningún beneficio para el uso de un número incremental de auto arbitrario sobre el mongo identificador generado ofrece. No solo no es solo una identificación arbitraria, sino que debes mantener la secuencia.

Dicho esto, ¿por qué no dejar que mongo gestionar el ello, y utilizan otro identificador único para sus URL. Si tus usuarios tienen un 'nombre de usuario', supongo que ya te has asegurado de que sea único en toda la colección. Solo consulta por esa propiedad única, en lugar de buscar por ID.

Eso también permite al usuario cambiar su identificador único, sin que tenga que volver a asignar las asociaciones en la base de datos.

Y para el puesto, solo generan una babosa única del título.

8

Por qué no usar balas de mensajes y nombres de usuario para los usuarios? Eso debería ser legible por humanos.

+0

Tengo que preguntar, ¿qué es una babosa? – raffian

+2

Definición de Wikipedia: "Un lingote es la parte de un URL que identifica una página utilizando palabras clave legible por humanos [1] [2], por ejemplo 'Slug_ (web_publishing)', en lugar de un identificador opaco tal como el número ID de el contenido dentro de la base de datos (por ejemplo, "27077911"). Las babosas se utilizan para construir URL limpias (a menudo para enlaces permanentes) fáciles de escribir, descriptivas y fáciles de recordar. Por ejemplo, en esta URL: http: //example.org/2011/introduction-to-blogging la babosa es la "introducción a los blogs" ". – dicarsio

Cuestiones relacionadas