en mi aplicación realizo algunas operaciones por lotes. lamentablemente esto a veces lleva una eternidad actualizar 400-500 entidades. lo que tengo son todas las claves de entidad, necesito obtenerlas, actualizar una propiedad y guardarlas en el almacén de datos y guardarlas puede tomar hasta 40-50 segundos, que no es lo que estoy buscando.manera más eficiente de obtener, modificar y poner un lote de entidades con ndb
enferma simplificar mi modelo para explicar lo que hago (que es bastante simple de todos modos):
class Entity(ndb.Model):
title = ndb.StringProperty()
keys = [key1, key2, key3, key4, ..., key500]
entities = ndb.get_multi(keys)
for e in entities:
e.title = 'the new title'
ndb.put_multi(entities)
obtener y modificar no toma demasiado tiempo. Intenté get_async en un tasklet y cualquier otra cosa que sea posible, que solo cambia si el get o el forloop demoran más.
pero lo que realmente me molesta es que una opción de venta puede tardar hasta 50 segundos ...
cuál es la forma más eficiente de hacer esta operación (s) en una cantidad decente de tiempo. por supuesto, sé que depende de muchos factores, como la complejidad de la entidad, pero el tiempo que lleva ponerlo realmente supera el límite aceptable para mí.
intenté operaciones asíncronas, tasklets ...
todas las entidades están en la misma entidad grupo y después de algunas pruebas tengo que decir que el uso de un tasklet para poner las entidades dentro de una tarea diferida por lotes en 50 hace que esta operación sea mucho más rápida. Estoy hablando de 5-10 segundos para la actualización completa que todavía no es lo que tenía en mente, pero mucho mejor que 50 segundos. – aschmid00
Me parece sorprendente, si todos están en el mismo grupo, ¿no tener diferentes lotes te haría llegar al límite de aproximadamente 1 escritura/segundo/grupo? – Alexis
1 lote/segundo suena sobre lo que está recibiendo ... –