nella mia app ho alcune operazioni batch che eseguo. sfortunatamente questo a volte richiede un tempo infinito per aggiornare 400-500 entità. quello che ho sono tutte le chiavi di entità, ho bisogno di ottenerle, aggiornare una proprietà e salvarle nell'archivio dati e il loro salvataggio può richiedere fino a 40-50 secondi, che non è quello che sto cercando.il modo più efficiente per ottenere, modificare e mettere un gruppo di entità con ndb
malato semplificare la mia modello per spiegare quello che faccio (che è abbastanza semplice comunque):
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)
ottenere e modifica non prende troppo tempo. Ho provato a get_async a entrare in un tasklet e qualsiasi altra cosa è possibile che cambia solo se il get o il forloop richiede più tempo.
ma ciò che mi preoccupa è che una put richiede fino a 50 secondi ...
qual è il modo più efficace per fare questa operazione (s) in una discreta quantità di tempo. ovviamente so che dipende da molti fattori come la complessità dell'entità, ma il tempo necessario per metterlo è davvero oltre il limite accettabile per me.
ho già provato operazioni asincrone, tasklet ...
tutte le entità sono nella stessa entità gruppo e dopo alcuni test devo dire che l'utilizzo di un tasklet per mettere le entità entro un task posticipato di 50 in batch rende questa operazione molto più veloce. Sto parlando di 5-10 secondi per l'aggiornamento completo che non è ancora quello che avevo in mente ma molto meglio di 50 secondi. – aschmid00
Trovo che ciò sia sorprendente, se sono tutti nello stesso gruppo, se non avessimo gruppi diversi, raggiungeremo il limite di circa 1 scrittura/secondo/gruppo? – Alexis
1 batch/secondo su ciò che sta ottenendo ... –