У меня есть тип хранилища данных Google App Engine, называемый Obj, и он имеет около 500K объектов на производстве. Я пытаюсь запросить только 50 объектов Obj, но несмотря на то, что я устанавливаю предельный аргумент на 50, запрос в конечном итоге вызывает ошибку «Превышение предела ограниченной частной памяти».Google App Engine NDB Запросы и превышение памяти
Будет ли это иметь какое-то отношение к использованию ndb.GenericProperty в запросе? Атрибут «trashed_date», который является типом даты и времени, обычно не является атрибутом Obj. Я также вручную создал правильный индекс для статуса и trashed_date. Должно ли «trashed_date» всегда быть собственностью этой модели?
Ниже приведен код, который я использую, что я могу сделать при запросе всего 50 объектов, которые не превышают ограничение на память?
q = Obj.query(
Obj.status == 1,
ndb.GenericProperty('trashed_date') < expire_date
)
results = q.fetch(50)
Я сомневаюсь, что это имеет какое-либо отношение к общей собственности. Хотя если класс Obj не имеет свойства trashed_date, почему вы запрашиваете его? Насколько велики объекты, которые вы извлекаете. Происходит ли ошибка при каждом запуске запроса или с течением времени? –
Он всегда выдает ошибку. Мысль состоит в том, что очень немногие из объектов Obj когда-либо имеют свойство trashed_date. Каждый объект не должен быть очень большим, не более 1K. – adam
Возможно, вам захочется просмотреть приложение. См. Https://code.google.com/p/apptrace/wiki/UsingApptrace. В стороне вы понимаете, что объекты, у которых нет свойства trashed_date, никогда не будут возвращаться с этим запросом. –