2010-07-16 37 views
0

我做了一個db.get([356 keys])並花了8秒。下面是此操作的AppStats圖的摘錄: http://vvcap.net/db/iXvU5LtfG6tp04-kjqvp.htp解釋我的AppStats圖形db.get

對於356個鍵,8秒正常嗎?爲什麼CPU時間比API CPU時間大?如果有的話我會期望API CPU時間更長,因爲實體是並行取得的。

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

只是查詢鍵還是你得到完整的實體? – 2010-07-17 01:04:18

+1

如果他正在使用'db.get()',那麼正在檢索完整的實體。 – 2010-07-17 01:34:55

+0

@Liron:你能發佈正在檢索的模型的定義嗎?你是在本地還是生產環境中運行? – 2010-07-17 01:36:49

回答

1

6-8秒肯定是高的,但您要提取的模型是相當複雜的。很長一段時間的原因是由於您要獲取的實體的數量和大小 - API時間未考慮的大部分CPU時間是等待請求完成所花費的時間(例如,從一個IO或更多的平板電腦服務器)。

有可以採取加快速度的幾種方法:

  1. 取更少的實體。
  2. 將模型分爲兩部分,'完整'模型和'總結'。只有儘可能地獲取彙總實體。
  3. Memcache獲取的結果。
  4. Memcache使用獲取的數據生成的輸出。