Google App Engine NDB查询并超出内存

时间:2013-08-17 03:46:12

标签: python google-app-engine python-2.7 app-engine-ndb

我有一个名为“Obj”的Google App Engine数据存储区,它在生产中有近500K实体。我正在尝试仅查询50个Obj实体,但即使我将limit参数设置为50,查询最终也会抛出错误“Exceeded soft private memory limit”。

这是否与在查询中使用ndb.GenericProperty有关?属性“trashed_date”是日期时间类型,通常不是Obj的属性。我还手动为status和trashed_date创建了正确的索引。 “trashed_date”应该始终是该模型的属性吗?

以下是我正在使用的代码,在查询50个实体时,如果不超出内存限制,我该怎么办?

q = Obj.query(
    Obj.status == 1,
    ndb.GenericProperty('trashed_date') < expire_date
)
results = q.fetch(50)

1 个答案:

答案 0 :(得分:3)

请使用q.iter()和计数器将其限制为50.我遇到了与fetch()类似的问题并使用iter()修复了它。 GAE现在非常强烈建议不要使用fetch。因人而异。 HTH。 -stevep