8

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!

risposta

5

Il problema non è il numero di entità che si stanno recuperando, è il fatto che si trovano in più gruppi di entità. O effettuare il recupero all'esterno di una transazione o utilizzare uno XG (Cross Group) transaction.

+0

Sì, ho perso quella parte di 5 entità. – expert

+1

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à. –

+0

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

1

In una singola transazione è possibile gestire entità nello stesso gruppo di entità.

What Can Be Done In a Transaction

+1

Ah sì, è 5 per la replica alta che utilizzo. Ho anche aggiornato la tua risposta. – expert