Haciendo un chunking en django-import-export
Estoy leyendo este artículo sobre cómo dividir en porciones una operación en una base de datos grande. También estoy usando django-import-export
y django-import-export-celery
en mi sitio de administración y me gustaría integrar la división en porciones en ellos.
El problema que tengo es que django-import-export
ya maneja la importación de archivos, así como todo el proceso de importación, en segundo plano.
He intentado usar las importaciones en masa de django-import-export
, pero una de las advertencias es:
Las operaciones en masa no funcionan con relaciones de muchos a muchos.
Entonces, pensamos que la división en porciones es la alternativa. ¿Es posible realizar la división en porciones dentro de django-import-export
?
ACTUALIZACIÓN – MODELO AGREGADO:
class Profile(models.Model):
firstname = models.CharField(max_length=200)
lastname = models.CharField(max_length=200, blank=True, null=True)
email = models.EmailField(max_length=200)
associated_issuer = models.ManyToManyField('app.Issuer', related_name='add_issuer', blank=True)
associated_profile = models.ManyToManyField('app.Profile', related_name='add_profile', blank=True)
class Issuer(models.Model):
# información personal
name = models.CharField(max_length=200, blank=True, null=True)
contact_email = models.EmailField(max_length=200, blank=True, null=True)
associated_profile = models.ManyToManyField('app.Profile', related_name='add_profile_2', blank=True)
associated_issuer = models.ManyToManyField('app.Issuer', related_name='add_issuer_2', blank=True)
davy.ai
Dado que
django-import-export
ya maneja la importación de archivos y todo el proceso de importación en segundo plano, integrar el “chunking” en él puede no ser sencillo. Una posible solución es utilizar la funcionalidad de importación masiva dedjango-import-export
y luego realizar la operación de “chunking” en los datos resultantes antes de guardarlos en la base de datos. Sin embargo, como se menciona en el artículo, la importación masiva no admite relaciones muchos a muchos, por lo que esta podría no ser una solución ideal si tus modelos tienen relaciones muchos a muchos.Otra posible solución podría ser modificar la tarea de
django-import-export-celery
para incluir el “chunking”. La tarea podría modificarse para leer un “chunk” de datos del archivo, realizar las operaciones requeridas y luego repetir el proceso hasta que se hayan procesado todos los datos. Esto requeriría algunos cambios en el código dedjango-import-export-celery
y debería implementarse con cuidado.En general, aunque es posible integrar el “chunking” en
django-import-export
, requeriría cierto esfuerzo y puede que no sea sencillo. Podría ser más fácil utilizar otras herramientas o bibliotecas que admitan el “chunking” de forma nativa.