2011-11-13 10 views
9

Poiché GAE è passato al modello di determinazione dei prezzi all'inizio della scorsa settimana, ho lottato con il superamento della mia quota di operazioni di lettura e scrittura di Datastore. Non sono sicuro che Google conti tutti gli aggiornamenti per uno scrittore come una sola scrittura o se ogni aggiornamento di colonna viene conteggiato come una scrittura separata.Che cosa classifica Google come operazione di scrittura del datastore in Google App Engine?

Se quest'ultimo è vero, potrei aggirare questo avendo una funzione di aggiornamento per aggiornare le 6 colonne nei parametri o farò anche pagare per 6 aggiornamenti?

Ecco il mio codice esistente, utilizzato per aggiornare il punteggio di un giocatore (valutazione) e gli altri dettagli allo stesso tempo. Al momento compro sempre nome, email, valutazione, vinto, giocato e risultati con i valori del cliente. Una soluzione potrebbe essere quella di inviarli solo dal lato client quando hanno cambiato valore.

Long key = Long.valueOf(updateIdStr); 
System.out.println("Key to update: " + key); 
PlayerPersistentData ppd =null; 
try { 
    ppd = pm.getObjectById(
    PlayerPersistentData.class, key); 
// for all of these, make sure we actually got a value via 
// the query variables 
    if (name != null && name.length() > 0) { 
     ppd.setName(name); 
} 

if (ratingStr != null && ratingStr.length() > 0) { 
    ppd.setRating(rating); 
} 

if (playedStr != null && playedStr.length() > 0) { 
    ppd.setPlayed(played); 
} 

if (wonStr != null && wonStr.length() > 0) { 
    ppd.setWon(won); 
} 

if (encryptedAchievements != null 
    && encryptedAchievements.length() > 0) { 
    ppd.setAchievements(achievements); 
} 

if (email != null & email.length() > 0) { 
    ppd.setEmail(email); 
} 

resp.getWriter().print(key); 
} catch (JDOObjectNotFoundException e) { 
    resp.getWriter().print(-1); 
} 
     } 
+0

Ho esaminato la documentazione dell'applicazione Google e sembra che un'operazione di scrittura sia 1 Scrittura + 4 Scritte per valore di proprietà indicizzato modificato + 2 Scritte per valore di indice composito modificato. Da quando ho appena inserito un nuovo indice composito sulla valutazione, achievementmentsCount (un conteggio denormalizzato dei risultati ottenuti) questa settimana presumo che sia la causa dell'aumento improvviso delle "scritture". Se questo significa che mi viene addebitato 1 + 4 + 2 per ogni scrittura su rating e achievementmentsCount o 1 + 4 + 4 + (2?) Non sono sicuro. –

+0

Chiamare set() su un numero inferiore di proprietà è improbabile che aiuti: il Datastore legge e scrive intere entità, non singole colonne. Se sei fortunato, il Datastore potrebbe evitare di eseguire gli aggiornamenti dell'indice non necessari (il modo più semplice per dirlo è eseguire alcuni test). Tuttavia, la soluzione più semplice è rendere alcune proprietà non indicizzate se non avrai mai bisogno di eseguire una query su di esse. –

risposta

17

Il numero di scritture per cui è stato addebitato dipende dall'entità. In generale, ti viene addebitato 1 costo per l'entità e 1 scrivi per ciascun aggiornamento dell'indice. Ogni proprietà indicizzata è inclusa negli indici di singole proprietà in ordine ascendente e discendente, pertanto è previsto un minimo di 2 scritture per entità indicizzata, più eventuali scritture per indici compositi (definiti dall'utente).

Quando si aggiorna un'entità esistente, viene addebitato il differenziale tra i vecchi indici e quelli nuovi. Pertanto, se modifichi una proprietà, ti verrà addebitato il costo della scrittura dell'entità, più 4 scritture per proprietà (eliminazione del vecchio valore e inserimento di quello nuovo) per gli indici incorporati e allo stesso modo per qualsiasi indice composito.

+0

Quindi, in sostanza, dovrei cambiare il mio front end per aggiornare solo i valori che sono effettivamente cambiati piuttosto che aggiornare tutto in una volta sola senza preoccuparti se il valore è cambiato o no? –

+1

@BarryIrvine Il datastore addebita solo per le cose che sono cambiate - se si imposta qualcosa allo stesso valore che è attualmente, non verrà addebitato alcun costo per un aggiornamento su quella colonna. –

+0

Vergogna :(Speravo che potesse ridurre l'importo che mi veniva addebitato per le scritture. Sembra che potrei aver bisogno di recuperare parte dei miei piccoli introiti pubblicitari in GAE. –

2

Nota i cambiamenti nella struttura dei prezzi che vanno in vigore 1 luglio 2016 passando da per operation a per entity. Questo cambia il modo in cui pensi di scrivere in modo efficiente (a livello di costi) in Datastore.

New Cloud Datastore Pricing Starting July 1st, 2016

Il 1 ° luglio 2016, Google Cloud Datastore prezzi cambierà da di ricarica per ogni operazione di ricarica per ogni entità. Questa semplificazione dei prezzi di significa che costa molto meno usare la piena potenza di Google Cloud Datastore.

Ad esempio, nel prezzo corrente, la scrittura di una nuova entità con 1 proprietà indicizzata costerebbe 4 operazioni di scrittura. Nel nuovo prezzo, lo costerebbe solo 1 scrittura di entità. Allo stesso modo, l'eliminazione di questa entità nel prezzo corrente di costerebbe 4 operazioni di scrittura, ma nel nuovo prezzo costerebbe solo 1 eliminazione entità.

+0

non lo sapeva, grazie! ! –

Problemi correlati