2013-06-13 45 views
1

在我的應用程序,我想有這樣定義的實體:與db.BlobProperty性能考慮()

class MyModel(db.Model): 
    title   = db.StringProperty() 
    myBlob   = db.BlobProperty() 

之所以這樣說,一滴擁有約1兆字節。這會減慢我對MyModel類型所做的任何查詢嗎?它是否每個實體獲取整個1mb,或者只是引用,直到我實際嘗試訪問blob?

回答

1

一旦您檢索實體,blob將從數據存儲區加載,除非您執行投影查詢。

你有幾個選項可以避免在你需要的時候加載BlobProperty。

  1. 做一個投影查詢,然後只在你需要的時候獲取完整的實體。

  2. 將BlobProperty粘貼到一個Child實體中(使頂層爲祖先),並只在需要時使用get獲取該屬性。

  3. 不要使用BlobProperty,而是將其保存在GCS(Google CLoud Storage)中並從此處提供。

最後一個是,如果你的斑點做任何處理您的AppEngine實例並不需要參與與它的服務(根據您的要求當然是什麼)

+0

通過投影查詢受益,我假設你的意思是設置keys_only = true?另外我正在考慮使用GCS,但是與此相關的額外成本。如果我可以使用App Engine訪問BlobProperty和BlobStore,爲什麼我會使用它? –

+0

BlobStore正在被棄用。 GCS直接提供內容(也允許在像BlobStore這樣的檢索上進行圖像處理等操作(GCS正在取代Blobstore)。最後,項目查詢不像Keys唯一查詢,只讀查詢 - 您可以查看返回的屬性。 developers.google.com/appengine/docs/python/ndb/queries#projection。哦,如果你接近1MB,你可能會超過1MB?GCS就是這樣。 –