我想知道在Google App Engine中使用PolyModel優於模型在索引等方面的成本是多少?即使使用PolyModel,它沒有被分類過?Google App Engine中PolyModel over Model的成本
2
A
回答
6
PolyModel使用「class」列表屬性來存儲PolyModel實例「所在」的所有類。所以如果你有一個名爲Bar的子類的PolyModel Foo,Bar的任何實例都會在它的「class」屬性中有[u'Foo',u'Bar']。 Bar的實例實際上作爲Foo的實例存儲在數據存儲中,在「class」屬性中帶有Bar模型名稱。
需要將「class」屬性編入索引,以便每次寫入PolyModel子類時都會對列表中的每個類名稱(一個用於降序,一個用於升序)進行額外的兩次寫入「class」索引,所以如果模型的「class」屬性包含[u'Foo',u'Bar'],需要4次額外的索引寫入來寫入該模型。
當您查詢數據存儲以獲取Foo實例時,數據存儲可以查看每個將Foo作爲父模型的模型,而無需對「類」屬性進行必要的過濾(我不確定它是否過濾在課堂上,但我懷疑它沒有)。
當您查詢數據存儲的Bar實例時,它實際上查詢Foo的實例,但在「class」屬性上應用過濾器以將結果過濾爲Bar類型的模型。如果您沒有應用其他篩選器和排序順序,您可能不會在組合索引中注意到這一點,但是如果應用篩選器並對數據存儲進行排序,則可能需要您的組合索引包含「class」屬性,這可能需要您具有更多的組合索引並寫入更多的複合索引。
我的一個應用程序在PolyModel上使用多級繼承,幾乎每個查詢都在「創建的」DateTimeProperty上排序。每個查詢都需要一個包含「class」的組合索引。在我的情況下,額外的索引寫入已經完全值得,因爲PolyModel允許我以很好的方式對數據進行建模。
更新於2012年2月7日包含來自@Nick的信息。
相關問題
- 1. Google App Engine索引成本
- 2. 確定ndb PolyModel Google App Engine中的對象類
- 3. 在Google App Engine中將模型轉換爲PolyModel
- 4. 在Google App Engine中,類可以是Expando和Polymodel嗎?
- 5. Google App Engine請求成本估算
- 6. Google App Engine中的密鑰生成
- 7. Polymodel類可以與Google App Engine Django Helper中的Basemodel一起使用嗎?
- 8. Google App Engine版本號?
- 9. Google App Engine unique = True?
- 10. Google App Engine中的本地MySQL
- 11. 將Sendgrid集成到Google App Engine中
- 12. Google App Engine Python Cron
- 13. Google App Engine ASP.net
- 14. Google App Engine DeobfuscatorBuilder
- 15. Python - Google App Engine
- 16. Google App Engine
- 17. Google App Engine Profiler
- 18. App Engine + Google Documents
- 19. Google App Engine Memcache
- 20. Google App Engine ThreadSafe
- 21. SSLHandshakeError - Google App Engine
- 22. 如何動態確定Google App Engine中是否存在Model類?
- 23. Google App Engine +驗證
- 24. 在Google App Engine中的appengine_config.py
- 25. Google App Engine中的VoteHandler
- 26. Google App Engine中的隔離
- 27. Google App域上的Google App Engine
- 28. Google App Engine的集成測試(java)
- 29. 在Google App Engine中安排Python腳本
- 30. Google App Engine代理
布賴斯優秀的東西,謝謝 – Yarin
類屬性實際上是一個列表;對於任何polymodel子類,它將包含至少2個條目;與內置索引這意味着至少4個索引寫入。 –