2012-06-17 11 views
6

Mis modelos ActiveRecord usan claves primarias basadas en uuid, y quiero usar find_in_batches para cargar 1000 registros a la vez. Sin embargo, al ver documentation, indica que solo funciona con la clave principal basada en enteros. Revisé el código y veo que simplemente ordena los registros por "primary_key ASC". ¿Por qué no funciona con una clave primaria no basada en enteros? ¿Solo por este orden? Probé mi modelo con este método, funciona bien.find_in_batches funciona solo con claves primarias basadas en enteros?

¿Alguien podría explicarme sobre esto?

Respuesta

7

Supongo que la documentación no es 100% correcta. Funciona correctamente con incremental clave principal. Si puede garantizar que la causa de cualquier nuevo registro será mayor que la clave de cualquier registro existente en la tabla, funcionará correctamente. De lo contrario, tiene la posibilidad de perder nuevos registros agregados después de iniciar el procesamiento por lotes.

Internamente, en cada paso obtiene la identificación del último registro (last_id) y selecciona 1000 registros con id mayor que last_id en el siguiente paso. Por lo tanto, si la aplicación crea un nuevo registro con el ID único < last_id durante el paso de procesamiento, este registro se excluirá del procesamiento.

+0

Sí, es una buena explicación. No pensé en nuevos registros agregados. – Chamnap

Cuestiones relacionadas