Este dilema se puede abordar de variadas formas, sin embargo te dejamos la respuesta más completa para nosotros.
Solución:
Sí, está perfectamente bien usar un valor aleatorio para una identificación de objeto, si algún valor está presente en _id
campo de un documento que se almacena, se trata como objectId.
Ya que _id
el campo siempre está indexado y el principal key, debe asegurarse de que se genere un ID de objeto diferente para cada objeto. Existen algunas pautas para optimizar los identificadores de objetos definidos por el usuario:
https://docs.mongodb.com/manual/core/document/#the-id-field.
Si bien se puede usar cualquier valor, incluidos los hashes, para el _id
campo, recomendaría no usar valores aleatorios por dos razones:
-
Es posible que deba desarrollar una estrategia de gestión de colisiones en el caso de que produzca valores aleatorios idénticos para dos objetos diferentes. En la pregunta, implica que generará ID utilizando algún tipo de algoritmo hash. No consideraría estos valores como “aleatorios”, ya que se basan en el contenido que está digiriendo con el hash. La probabilidad de una colisión entonces es una función de la diversidad de contenido y el algoritmo hash. Si está utilizando algo como MD5 o SHA-1, no me preocuparía el algoritmo, solo el contenido que está procesando. Si necesita desarrollar una estrategia de gestión de colisiones, definitivamente no debe usar identificaciones aleatorias o basadas en hash, ya que la gestión de colisiones en un entorno agrupado es complicada y requiere consultas adicionales.
-
Los valores aleatorios, así como los valores hash, están destinados deliberadamente a dispersarse en la recta numérica. Eso (a) requerirá que más del índice del árbol B se mantenga en la memoria en todo momento y (b) puede causar un rendimiento de inserción variable debido al reequilibrio del árbol B. MongoDB está optimizado para manejar ObjectID, que vienen en orden ascendente (con granularidad de un segundo). Es probable que sea mejor que te quedes con ellos.
Si es bueno o malo depende de su singularidad. Por supuesto, el ObjectId proporcionado por MongoDB es bastante único, por lo que es algo bueno. Mientras puedas replicar esa singularidad, entonces deberías estar bien.
No hay riesgos inherentes/pérdidas de rendimiento al usar su propia identificación. Supongo que usarlo en string el formulario puede usar más poder de índice/almacenamiento/consulta, pero ahí lo está usando en el formulario MongoID (ObjectId) que debería preservar las fortalezas de no almacenarlo en un simple string.
Reseñas y calificaciones
Ten en cuenta mostrar este enunciado si lograste el éxito.