由於GAE在上週初進入定價模式,我一直在努力超越配額的數據存儲讀寫操作。我不確定Google是否將一位作者的所有更新統計爲一次寫入,或者每次列更新是否被計爲單獨寫入。Google在Google App Engine中將什麼歸類爲數據存儲區寫入操作?
如果後者是真的,我可以通過一個更新函數更新參數中的6列來解決這個問題嗎?或者我也會收取6次更新的費用嗎?
這是我現有的代碼,用於同時更新玩家的分數(等級)和其他詳細信息。目前,我總是通過客戶端的名字,電子郵件,評分,贏得,玩過並取得成就。一種解決方案可能只是在客戶端更改價值時才發送這些解決方案。
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);
}
}
我查看了Google應用程序文檔,它看起來像寫操作是1寫入+4寫入每個修改的索引屬性值+ 2寫入每個修改的複合索引值。因爲我剛剛在評分上寫了一個新的綜合指數,這個星期我取得了成就數(成就集的非規格化數),我認爲這是「寫」突然上升的原因。這是否意味着我每次在評分和成就數上寫1 + 4 + 2或1 + 4 + 4 +(2?)我都不確定。 –
在較少的屬性上調用set()不太可能有所幫助 - 數據存儲讀取和寫入整個實體,而不是單個列。如果幸運的話,Datastore可能會避免執行不必要的索引更新(最簡單的方法是運行一些測試)。但是,最簡單的解決方法是,如果您永遠不需要查詢它們,則可以使某些屬性不被索引。 –