Обходной путь для сохранения модели с множеством свойств без использования слишком большого времени процессора? - PullRequest
1 голос
/ 12 сентября 2011

У меня есть модель с большим количеством свойств, и когда я пытаюсь записать ее, в журналах появляется предупреждение о том, что запрос занимает слишком много процессорного времени (более 1000 cpu_ms и более 8000api_cpu_ms).

Следующая тестовая программа демонстрирует проблему:

class TestModel(db.Model): 
    user = db.UserProperty() 
    p1 = db.StringProperty() 
    p2 = db.StringProperty() 
    p3 = db.StringProperty()
    p4 = db.StringProperty()
    p5 = db.StringProperty() # 475cpu_ms with 1..5 only
    p6 = db.StringProperty()
    p7 = db.StringProperty()
    p8 = db.StringProperty()
    p9 = db.StringProperty()
    p10 = db.StringProperty() # 760cpu_ms with 1..10 only
    p11 = db.StringProperty()
    p12 = db.StringProperty()
    p13 = db.ListProperty(unicode)
    p14 = db.ListProperty(int) 
    p15 = db.ListProperty(int)
    p16 = db.BooleanProperty()
    p17 = db.DateTimeProperty() #over 1000cpu_ms with all these


class DebugitHandler(webapp.RequestHandler):
    def get(self):
        instance = TestModel()
        instance = instance.put() 
        self.response.out.write("Done.")

Все время ЦП затрачивается на этот один .put() вызов.

Кроме разделения модели на более чем один (который, вероятно, выигралне поможет, так как у меня все равно будет такое же количество свойств) есть ли способ обойти эту проблему?способ поместить 1 экземпляр с 20 свойствами в хранилище данных, не занимая более 1 секунды процессорного времени?

1 Ответ

3 голосов
/ 12 сентября 2011

Как указано в документации о квотах :

По мере увеличения количества свойств, связанных с данным объектом, увеличивается и время ЦП, необходимое для чтения и записи этого объекта

Если вам не нужно сортировать или фильтровать каждое из этих свойств, вы можете добавить объявление indexed = False к некоторым из них;это должно сэкономить некоторое время процессора ..

class TestModel(db.Model): 
    user = db.UserProperty(indexed = False) 
    p1 = db.StringProperty(indexed = False) 
    p2 = db.StringProperty(indexed = False) 
    p3 = db.StringProperty(indexed = False)
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...