rails ruby-on-rails mongodb mongoid

ruby-on-rails - mongodb rails 5



¿Es malo cambiar el tipo_id en MongoDB a entero? (2)

MongoDB usa el tipo ObjectId para _id.

¿Sería malo si hago _id un entero incremental?

(Con this gema, si te interesa)


No, no está mal en absoluto y, de hecho, el OjbectId es bastante importante dentro del índice, por lo que si crees que tienes algo mejor, entonces puedes cambiar el valor predeterminado del campo _id a lo que sea.

Pero, y esto es un gran problema, hay algunas consideraciones cuando se decide alejarse del ObjectId formulado por defecto, especialmente cuando se usa el _ids de incremento automático como se muestra aquí: http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/#auto-increment-counters-collection

Los subprocesos múltiples no son un problema tan grande porque findAndModify y los bloqueos atómicos realmente pueden findAndModify eso, pero luego solo te findAndModify con tu primer problema. findAndModify no es la función más rápida ni la más ligera, y se han observado caídas significativas en el rendimiento cuando se usa regularmente.

De todos modos, también debe considerar la sobrecarga de hacer esto usted mismo, incluso sin findAndModify . Para cada inserción que tenga, deberá hacer una consulta adicional. La imagen tiene un ID único que debe consultar la singularidad de cada vez que desea insertar, finalmente, su tasa de inserción bajará a un rastreo y su bloqueo se acumulará.

Por supuesto, el ObjectId es realmente bueno en ser único sin tener que verificar o formular su propia singularidad al tocar la base de datos antes de la inserción, por lo que no tiene esta sobrecarga.

Dicho esto, no es la peor idea del mundo y, si crees que se adapta a tu situación, no lo dudes, pero ten en cuenta que si no necesitas el ID de incremento automático, podría ser una carga para ti.


Puede hacerlo, pero es responsable de asegurarse de que los enteros sean únicos.

MongoDB no admite campos de incremento automático como la mayoría de las bases de datos SQL. Cuando tiene una aplicación distribuida o multiproceso que tiene múltiples procesos y / o hilos que crean nuevas entradas de base de datos, debe asegurarse de que usen el mismo contador. De lo contrario, podría suceder que dos subprocesos intenten almacenar un documento con el mismo _id en la base de datos.

Cuando eso suceda, uno de ellos fallará. Eso significa que tiene que esperar a que la base de datos devuelva un éxito o un error (llamando a GetLastError o configurando las preocupaciones de escritura como reconocidas ), lo que lleva más tiempo que el simple envío de datos de manera automática.