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);
}
}
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. –
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. –