Ho un'entità seguente (campi/metodi non rilevanti vengono rimossi).Quanti oggetti sono "troppi" per una singola transazione nel DataStore di Google (High Replication)?
public class HitsStatsTotalDO
{
@Id
transient private Long targetId;
public Key<HitsStatsTotalDO> createKey()
{
return new Key<HitsStatsTotalDO>(HitsStatsTotalDO.class, targetId);
}
}
Allora ... io sto cercando di fare in batch ottenere per 10 oggetti per i quali costruisco le chiavi utilizzando HitsStatsTotalDO.createKey()
. Sto tentando di prenderli in un'operazione come questa:
final List<Key<HitsStatsTotalDO>> keys = ....
// This is being called in transaction..
Map<Key<HitsStatsTotalDO>, HitsStatsTotalDO> result = DAOBase.ofy().get(keys);
che getta seguente eccezione:
java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.
La prego di Elaborare quanti sono troppi e come risolvere il problema? Non sono riuscito a trovare il numero esatto nella documentazione.
Grazie!
Sì, ho perso quella parte di 5 entità. – expert
Almeno in Python SDK 1.7.3, esistono due diversi messaggi di errore in BadRequestError: "la transazione tra gruppi deve essere specificata in modo esplicito, vedere TransactionOptions.Builder.withXG" e "operare su troppi gruppi di entità in un singolo transazione". La tua risposta risolve il primo, ma quest'ultimo può accadere in una transazione XG, se opera su più di 5 gruppi di entità. –
Per le transazioni XG ora, il limite sembra essere 25 gruppi di entità. Vedi https://cloud.google.com/appengine/docs/standard/java/datastore/transactions?csw=1#What_Can_Be_Done_In_a_Transaction – rimsky