2012-08-25 96 views
9

出於某種原因,我一直認爲,編寫現有實體與編寫新實體一樣昂貴(如果不是更多),所以我的很多代碼都集中在將實體分解爲更小的實體的方式,以便在修改屬性時降低寫入成本。然而,現在在documentation看,它指出現有實體放有以下成本:將現有實體放入Google App Engine

1寫入+ 4次%改性的索引屬性值每 改性複合索引值+ 2次寫入的寫入

在我改變我的代碼的整個結構之前,我想確定我理解的細節。什麼確切地將索引限定爲「修改」?假設我有4個索引字符串屬性並且沒有組合索引。把這個作爲一個新的實體將花費10寫(2 + 2(indexed properties))。假設我現在修改其中一個字符串屬性並將其放回。這將花費5只寫(1 + 4 per modified index)?我錯過了什麼?有什麼我應該考慮的?

如果我有4個索引屬性和1個非索引屬性,而我只修改非索引屬性 - 這隻會花費我1個寫入重新放置?

+0

如果可以的話,我會再試一次。 – dragonx

+1

此外,現在AppStats提供了有關操作成本(必須啓用)的統計信息,因此在SDK 1.7.1中測試起來非常簡單。它會告訴你每個操作執行的次數。真正有用的新功能。 –

回答

3

所有的推測都是正確的。如果您知道寫入的內容,它會有所幫助:1寫入的是實體本身;在創建時每個索引屬性的2次寫入用於每個屬性的升序和降序單一屬性索引,並且每次更新時每個索引屬性的寫入次數是刪除舊值並將新值插入到升序和降序索引中。

1

我剛剛跑了一個實驗,我更新了一個模型,它有3個索引屬性(其中一個是列表),還有4個未指定索引的屬性。

我用一個mapreduce運行來更新一個未索引的屬性和Put()實體。

如果我做了我的數學計算,我已經證實,每個實體只需要1次寫操作,即使有3個索引屬性(未更新)。 (我的數學可能有點不便,因爲我使用了mapreduce,mapreduce本身發佈了一堆數據存儲寫入,我做了一個單獨的實驗來估計mapreduce寫入的數量,所以我已經說明了這一點)。

相關問題