Es malo cambiar _id tipo en MongoDB a entero?

MongoDB utiliza ObjectId tipo de _id.

Va a ser malo si hago _id un incremento entero?

(Con este joya, si te interesa)

  • Realmente depende de la situación. Hay un argumento para que no porque es un identificador único (auto incremento) pero luego hay uno para sí, porque de los gastos de mantenimiento necesarios para mantener el identificador único (tener que consultar al otro contador de colección). Es como tener que comprobar la unicidad de todos los _ids antes de insertarlos, finalmente se obstaculizar la tasa de inserciones y crear prolongado bloqueo.
  • Hmm, así que muchas de las acciones en DB para esta característica simple? =(
  • Sí bastantes porque, por supuesto, MongoDB no tiene sentido del lado del servidor de auto incremento de identificación, usted puede mirar aquí para lo que se necesita para hacer uno: docs.mongodb.org/manual/tutorial/… de hecho, esta es una de las razones por las que MongoDB no es compatible con este tipo de id del lado del servidor
  • En realidad, mongo uso ObjectID tipo de datos para que _id‘s. ObjectID es de 12 bytes de datos binarios y no cadenas. Consulte MongoDB Documentación para más información.
  • Oh, realmente se olvidó =)
InformationsquelleAutor just so | 2012-12-27

2 Kommentare

  1. 23

    No, eso no es malo en absoluto y, de hecho, la incorporada en ObjectId es bastante considerable en el índice de modo que si crees que tienes algo mejor, a continuación, usted es más que bienvenido para cambiar el valor predeterminado de la _id campo para lo que sea.

    Pero, y esto es un gran pero, hay algunas consideraciones a la hora de decidir alejarse de la predeterminada formulado ObjectId, especialmente cuando se utiliza la función de incremento de _ids como se muestra aquí: http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/#auto-increment-counters-collection

    Multi threading, no es un gran problema porque findAndModify y la atómica de los bloqueos pueden ocuparse de eso, pero entonces usted acaba de golpear en su primer problema. findAndModify no es la función más rápida ni la más ligera y no han sido significativas en el rendimiento cae notado cuando se utiliza con regularidad.

    Que también se han de considerar la sobrecarga de hacer esto por sí mismo de todos modos, incluso sin findAndModify. Para cada inserto usted tiene que usted tendrá que hacer un extra de consulta. La imagen de tener un identificador único que tienes que consultar la singularidad de cada vez que quería insertar, finalmente, la inserción de la tasa se reducirá a un rastreo y su bloqueo se acumulan.

    De curso de la ObjectId es realmente muy bueno en el ser único sin tener que comprobar o formular su propia singularidad, tocando la base de datos antes de la inserción, por lo tanto no tienen los gastos generales.

    Lo que se dice no es la peor idea del mundo y si usted piensa que se adapte a su situación, a continuación, ir a por ello, pero ten en cuenta que si usted no requiere de auto incremento de identificación podría ser una carga para usted.

  2. 9

    Usted puede hacerlo, pero usted es responsable de asegurarse de que los números enteros son únicos.

    MongoDB no admite campos de incremento automático, como la mayoría de las bases de datos de SQL. Cuando usted tiene un distribuida o aplicación multiproceso que tiene varios procesos y/o subprocesos que crear nuevas entradas de base de datos, usted tiene que asegurarse de que se utilice el mismo contador. De lo contrario podría suceder que dos hilos intenta guardar un documento con el mismo _id en la base de datos.

    Cuando eso sucede, uno de ellos va a fallar. Eso significa que usted tiene que esperar para la base de datos para devolver un éxito o de error (llamando a GetLastError o mediante el establecimiento de los asuntos de escritura a reconoció), que lleva más tiempo que sólo el envío de datos en un incendio-y-olvidar manera.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea