2011-11-13 81 views
9

由於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); 
} 
     } 
+0

我查看了Google應用程序文檔,它看起來像寫操作是1寫入+4寫入每個修改的索引屬性值+ 2寫入每個修改的複合索引值。因爲我剛剛在評分上寫了一個新的綜合指數,這個星期我取得了成就數(成就集的非規格化數),我認爲這是「寫」突然上升的原因。這是否意味着我每次在評分和成就數上寫1 + 4 + 2或1 + 4 + 4 +(2?)我都不確定。 –

+0

在較少的屬性上調用set()不太可能有所幫助 - 數據存儲讀取和寫入整個實體,而不是單個列。如果幸運的話,Datastore可能會避免執行不必要的索引更新(最簡單的方法是運行一些測試)。但是,最簡單的解決方法是,如果您永遠不需要查詢它們,則可以使某些屬性不被索引。 –

回答

17

您收取的寫入次數取決於您的實體。一般來說,您需要爲實體寫入1次,併爲每個索引更新寫入1次。每個索引屬性都包含在升序和降序單屬性索引中,因此每個索引實體至少有2次寫入,並且還包含對複合(用戶定義)索引的任何寫入。

更新現有實體時,您需要支付舊索引和新索引的差異。因此,如果您修改了一個屬性,則將針對實體寫入收取費用,併爲每個屬性(刪除舊值並插入新屬性)爲內置索引添加4次寫入,同樣對於任何複合索引也是如此。

+0

所以基本上我應該改變我的前端只更新實際改變的值,而不是一次更新所有內容,而不必擔心值是否已經改變? –

+1

@BarryIrvine數據存儲只收取您更改內容的費用 - 如果您將某些值設置爲與當前值相同,則不會因該列的更新而收取費用。 –

+0

恥辱:(我希望這可能會減少我爲寫作收取的費用。看起來我可能需要將我的一些小廣告收入投入到GAE中。然後 –

2

說明開始生效2016年7月1日打算從per operationper entity的變化在價格結構。這改變了你如何考慮將有效地(成本明智地)寫入數據存儲。

New Cloud Datastore Pricing Starting July 1st, 2016

2016年7月1日,谷歌雲存儲的價格將從每 充電操作每個實體充電改變。這種簡單得多的價格意味着使用Google Cloud Datastore的全部功能將顯着降低成本。

例如,在當前的定價中,編寫一個新的實體和1 索引屬性將花費4個寫入操作。在新的定價中, 僅需要1個實體寫入。同樣,刪除 當前定價中的該實體將花費4次寫入操作,但在新定價 中,僅需要1次實體刪除。

+0

不知道,謝謝! ! –

相關問題