2013-02-27 29 views
2

我似乎記得,每個存儲的舊數據存儲屬性都有類似於2 的數據存儲寫入操作(DWO),並且可能還有一些取決於它們如何編制索引。與舊數據存儲區屬性相比NDB JsonProperty配額影響?

在舊的數據存儲中,我經常存儲所有不需要在JSON字符串中索引的內容,並將其存儲爲TextProperty以保存多個寫入。

已經習慣於直接從數據存儲保存和使用JSON中的所有內容,當切換到新應用的NDB時,我自然會使用NDB JsonProperty。

像往常一樣,我第一次檢查了我的配額限制(典型的自由配額限制用戶體驗?),並且注意到所有的數據存儲區寫入(完全由僅包含JsonProperties的模型組成)正在計劃很多DWO配額。

立即想知道:根據JsonProperty的結構,GAE DataStore是否進行多次寫操作?還是隻是將整個屬性blob存儲到數據存儲中,只需要一個「blob」存儲所需的DWO?

我認爲後者,並記得在文檔中閱讀,但大量的配額消耗(典型的自由配額限制用戶偏執?),讓我懷疑是否使用JsonProperty不如使用舊的數據存儲並將JSON字符串保存爲TextProperty - 這肯定是非結構化的斑點。

如果能夠明確地清除這將是一件好事,因此我可以回到僅關注應用程序的「appengine承諾」。 :)

回答

4

數據存儲是運行時不可知的,不知道是否有這樣的東西,因爲它不能根據您的數據進行索引/寫入。在implementationJsonPropertyBlobProperty,只是使用json序列化和反序列化數據:

class JsonProperty(BlobProperty): 
    def __init__(self, name=None, compressed=False, json_type=None, **kwds): 

一個BlobPropertycan beindexed與否,也compressed與否:

class BlobProperty(Property): 
    _indexed = False 
    _compressed = False 
    def __init__(self, name=None, compressed=False, **kwds): 

看來你可能將compressedTrue的情況與缺省值False進行比較。嘗試將其設置爲True,也許發佈一些原始數字進行比較(即使從db的案例中獲得一些意義)。

UPDATE:

我不知道我是在這個很清楚,和Guido的評論後,很顯然我不是。 您的ndb blob屬性的數據存儲寫入將與您的db blob屬性的數據存儲寫入完全相同。這些數字根據實體是否存在以及屬性是否被索引而變化。我對compressed的評論是爲了解決您可能已經困惑的任何其他性能/帶寬/大小問題。

如果檢出billing page,則存在從高級操作到低級操作的映射。有關你問我們什麼都有:

  • 新實體認沽(每實體,無論實體大小):2個寫入+ 2%的索引屬性值寫入每個組合索引值
  • + 1個寫把(每單位)現有實體:1個寫+ 4%修改索引屬性值寫入+ 2%的改性複合指數值
+0

大,謝謝你的答案寫(和鏈接!)。我會進一步調查。 – 2013-02-27 05:38:12

+1

壓縮與它無關 - 無論大小如何,都會計算DWO。索引確實很重要。但我會看看你的應用程序的其他部分。你有沒有嘗試過Appstats? – 2013-02-27 16:24:41

+3

此外,請檢出dev_appserver數據存儲區查看器(localhost:8080/_ah/admin)。查看數據存儲實體時,您會看到一個額外的列,指出數據存儲「寫操作」的數量。當你用'indexed = True'改變屬性的數量時,你會看到這個數字的變化(注意:'True'是默認值)。另請注意,在更改Model類以便將屬性顯式標記爲'indexed = False'後,當數據存儲刪除索引行的索引行時,首次更新每個實體時仍會產生額外的DWO。 – 2013-02-27 17:56:28

相關問題