在GAE文檔,它指出:在Google App Engine的for循環中查詢的有效方法?
因爲每個得到()或放()操作調用單獨的遙控 過程調用(RPC),發出許多這樣的呼叫內的環是 低效的方式來一次處理一組實體或密鑰。
誰知道我在代碼中有多少其他的低效率,所以我想盡量減少。目前,我確實有一個for循環,每個迭代都有一個單獨的查詢。假設我有一個用戶,並且一個用戶有朋友。我想獲取用戶的每個朋友的最新更新。所以,我有什麼是該用戶的朋友的數組:
for friend_dic in friends:
email = friend_dic['email']
lastUpdated = friend_dic['lastUpdated']
userKey = Key('User', email)
query = ndb.gql('SELECT * FROM StatusUpdates WHERE ANCESTOR IS :1 AND modifiedDate > :2', userKey, lastUpdated)
qit = query.iter()
while (yield qit.has_next_async()):
status = qit.next()
status_list.append(status.to_dict())
raise ndb.Return(status_list)
有沒有一種更有效的方式來做到這一點,可能在某種程度上批次所有這些到一個單一的查詢?
你能提供你的數據模型嗎?取決於你如何存儲朋友關係,可能會有一個優化。 「朋友」只是一個ListProperty(或者如果您使用NDB時是重複屬性),還是您爲「朋友」關係查詢單獨的模型? – someone1
沒有朋友只是一個列表屬性。那麼有一個單獨的模型爲朋友,但這些不保存lastUpdated,所以我只是從客戶端設備的朋友,以及他們上次更新的日期,並把它們放在一本字典中。 – Snowman
您能否提供代碼對於你如何獲得「朋友」,你是什麼意思,你從客戶端設備獲得朋友? – someone1