1

我用GAE NDB的Python 2.7
我的兩個型號代碼:讀寫操作

class A(ndb.Model): 
    def X(self, value): 
     :: # some statements to return a value 
     return range 
    def Y(self, value): 
     :: # some statements to return a value 
     return range 
    def Z(self, value): 
     :: # some statements to return a value 
     return range 

    property_1 = ndb.IntegerProperty(default=0, indexed=False) 
    property_2 = ndb.IntegerProperty(default=0, indexed=False) 
    property_3 = ndb.IntegerProperty(default=0, indexed=False) 
    property_4 = ndb.IntegerProperty(indexed=False) 
    # Computed values 
    computed_property_1 = ndb.ComputedProperty(lambda e: e.X(e.property_1)) 
    computed_property_2 = ndb.ComputedProperty(lambda e: e.Y(e.property_2)) 
    computed_property_3 = ndb.ComputedProperty(lambda e: e.Z(e.property_3)) 
    date_added = ndb.DateTimeProperty(auto_now_add=True, indexed=False) 
    date_modified = ndb.DateTimeProperty(auto_now=True, indexed=False) 

class B(ndb.Model): 
    property_5 = ndb.IntegerProperty() 
    property_6 = ndb.StructuredProperty(A) 
    date_added = ndb.DateTimeProperty(auto_now_add=True, indexed=False) 
    date_modified = ndb.DateTimeProperty(auto_now=True, indexed=False) 

我的查詢代碼:

qry_1 = B.query(B.property_5==input_value) # or B.query(B.property_6.computed_property_2==input_value) 
record_list = qry_1.fetch() 

當我執行上面的查詢在模型B的實體上,是否會執行任何寫入操作? (尤其是ComputedProperty和DateTimeProperty的(用「auto_now」)屬性)

如果是的話,它被速率限制爲每秒1次寫入(我認爲是免費應用的極限)

如果是,如果我有50個與查詢相匹配的實體,它是否會在完成查詢並返回匹配的實體集(任何估計的查詢完成時間)之前首先完成寫操作(上面提到的)

上述答案中的任何區別如果我在B類中更換以下生產線

property_6 = ndb.StructuredProperty(A) 

property_6 = ndb.StructuredProperty(A, repeated=True) 
+0

B類沒有property_3屬性。這是一個錯字嗎? –

+0

@SlawekRewaj感謝和抱歉的錯字..我已糾正它.. – gsinha

+0

1寫/秒的限制適用於免費和付費應用程序。實際上意味着每個實體組寫入1次/秒。實體組通過共享相同的父母(又名aa祖先)和強烈一致的查詢來允許交易或交叉交易。這個限制很容易成爲你的應用程序的瓶頸,並使其縮小。因此,即使用戶使用您的應用程序時,實體組的建模方式也不太可能達到此限制。例如:評論/帖子將用戶作爲父項。用戶不太可能每秒執行超過1次寫操作。 – Ani

回答

0

有通過執行查詢沒有寫操作。這同樣適用於StructuredProperty的兩種變體。另外auto_now_addauto_now只在寫入操作期間設置。我不是100%肯定的,但據我瞭解文檔,計算屬性也寫在更新(我還沒有使用它們)。

+2

[計算屬性文檔](https://developers.google.com/appengine/docs/python/ndb/properties#computed)確認計算的屬性在實體寫入期間更新,以便爲數據存儲區查看器提供搜索值並顯示,並且這些值在讀取期間重新計算(但在讀取期間不會重寫)。 –

+0

謝謝你的澄清! – Ani