2010-07-16 3 views
0

J'ai fait un db.get([356 keys]) et cela a pris 8 secondes. Voici un extrait du graphique AppStats pour cette opération: http://vvcap.net/db/iXvU5LtfG6tp04-kjqvp.htpExpliquer mon graphique AppStats pour un db.get

Est-ce que 8 secondes est normal pour les touches 356? Et pourquoi le temps CPU est-il plus grand que le temps CPU de l'API? Si quelque chose je m'attendrais à ce que le temps CPU CPU soit plus grand, puisque les entités sont récupérées en parallèle.

Toutes les 356 clés sont pour ce modèle: est certainement élevé

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() 
+0

était les clés de requête uniquement ou obteniez-vous les entités complètes? –

+1

S'il utilise 'db.get()' alors les entités complètes sont récupérées. –

+0

@Liron: pourriez-vous afficher la définition du (des) modèle (s) en cours de récupération? Courez-vous dans l'environnement local ou de production? –

Répondre

1

6-8 secondes, mais les modèles dont vous récupérez sont assez complexes. La raison de ce délai est due au nombre et à la taille des entités que vous récupérez - la plupart du temps processeur non pris en compte par l'API est le temps passé à attendre la fin de la requête (par exemple, bloqué sur IO d'un ou plus des comprimés).

Il existe plusieurs approches que vous pouvez prendre pour accélérer les choses:

  1. Fetch moins entités.
  2. Divisez votre modèle en deux parties, le modèle «complet» et le «résumé». Ne récupérez les entités de résumé que lorsque c'est possible. Memcache le résultat de l'extraction.
  3. Memcache la sortie que vous générez avec les données récupérées.
Questions connexes