我用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)
B類沒有property_3屬性。這是一個錯字嗎? –
@SlawekRewaj感謝和抱歉的錯字..我已糾正它.. – gsinha
1寫/秒的限制適用於免費和付費應用程序。實際上意味着每個實體組寫入1次/秒。實體組通過共享相同的父母(又名aa祖先)和強烈一致的查詢來允許交易或交叉交易。這個限制很容易成爲你的應用程序的瓶頸,並使其縮小。因此,即使用戶使用您的應用程序時,實體組的建模方式也不太可能達到此限制。例如:評論/帖子將用戶作爲父項。用戶不太可能每秒執行超過1次寫操作。 – Ani