Объясните мой график AppStats для db.get - PullRequest
0 голосов
/ 17 июля 2010

Я сделал db.get([356 keys]), и это заняло 8 секунд. Вот выдержка из графика AppStats для этой операции: http://vvcap.net/db/iXvU5LtfG6tp04-kjqvp.htp

8 секунд нормально для 356 клавиш? И почему время процессора больше, чем время процессора API? Во всяком случае, я бы ожидал, что время ЦП API будет больше, поскольку объекты выбираются параллельно.

Все 356 ключей для этой модели:

class Molecule(db.Model):
    meaning = db.StringProperty()
    short_desc = db.StringProperty()
    official = db.BooleanProperty(default=False)
    phrasing = db.ReferenceProperty()
    atoms = db.ListProperty(db.Key) # ~3 list elements on average
    keywords = db.ListProperty(db.Key) # ~20 list elements on average
    phrasings = db.ListProperty(db.Key) # ~1 list element on average
    add_dt = db.DateTimeProperty()
    modify_dt = db.DateTimeProperty()
    delete_dt = db.DateTimeProperty()
    _ucase_meaning = db.StringProperty()

1 Ответ

1 голос
/ 19 июля 2010

6-8 секунд, конечно, много, но модели, которые вы выбираете, довольно сложные.Причиной длительного времени является количество и размер извлекаемых объектов - большая часть времени ЦП, не учитываемая временем API, представляет собой время, затрачиваемое на ожидание завершения запроса (например, заблокированное в IO от одногоили более серверов планшета).

Существует несколько способов ускорить процесс:

  1. Получить меньше объектов.
  2. Разделить модель на две части«полная» модель и «сводка».Извлекать только итоговые объекты, когда это возможно.
  3. Memcache результата выборки.
  4. Memcache результата, который вы генерируете с извлеченными данными.
...