我使用appengine和objectify作爲我的應用程序的後端。當我在數據存儲中查詢時,我得到一個Entity對象,它具有所需行的數據。但是,使用物化我將如何查詢實體並從中獲得選定的文件?因爲查詢整個實體將會很繁重,並且需要更多的數據帶寬。例如:在具有4列的實體中, - > Id,名稱,描述,年齡。我應該詢問oly Id,姓名,年齡。我不想要描述被查詢。在實體中查詢實體中的選定字段 - appengine
回答
如果您正在尋找投影查詢,它們還沒有在Objectify中實現。
https://groups.google.com/forum/#!topic/objectify-appengine/uvLIHhHMEM0
請描述更詳細的答案,而不是鏈接到另一個討論站點。或者,在問題上使用評論功能。 –
不知道爲什麼@jewirth低估了這一點,答案是現貨。 – koma
我誤解了答案。感謝您指出@koma。 –
的GAE數據存儲不工作像一個RDBMS;你不能隨意選擇和選擇從實體中查詢哪些字段。數據存儲查詢的標準行爲是遵循一個索引(將屬性值映射到實體鍵),然後通過鍵來獲取所有找到的實體。
有一種稱爲「投影查詢」(Objectify支持的功能;查詢命令對象上的project()
方法),但它不是像SQL中獲得的通用SELECT語句。投影查詢利用了索引本身包含索引值的事實,因此如果您只需要索引中的數據,則不需要執行整個實體的後續提取。但是,這帶有一些限制:
- 您必須維護一個包含所有希望投影的數據的多屬性索引。
- 您必須爲多屬性索引中的每個字段維護單一屬性索引。
- 您只能在遵循該特定索引的查詢上進行投影。
- 查詢繞過Objectify的基於內存緩存的實體緩存。
請注意使用投影查詢的成本。在您的示例中,您將需要Name和Age上的單一屬性索引以及{__key__, Name, Age}
上的多屬性索引。每個實體寫入3個寫入操作,而新的實體將花費8個寫入操作。另一方面,投影查詢的成本是一個常量1讀操作。
其他另一方面,從memcache獲取的批量成本爲0,最壞的成本爲1讀操作。除非您的描述字段已知會導致您的問題,否則這是一個大規模的過早優化。
- 1. 查詢更新appengine數據存儲實體中的字段
- 2. appengine:如何通過密鑰在具有祖先的實體中查詢實體?
- 3. AppEngine實體的審計字段
- 4. JPQL 2.0 - 基於超類實體字段的查詢實體
- 5. Doctrine2在實體中查詢
- 6. Tweepy實體Appengine
- 7. 實體字段的選項
- 8. 實體框架字段查詢很慢
- 9. 條件實體框架查詢字段
- 10. Symfony Form選定的字段實體
- 11. 實體中的Id字段
- 12. 實體查詢選擇TOP1
- 13. Java 8實體字段中可選
- 14. 如何在實體中添加實體列表? (AppEngine Java)
- 15. AppEngine,實體丟失?
- 16. 在實體表單中的自定義查詢中注入用戶字段
- 17. 如何在UPDATE查詢中將NULL設置爲實體字段?
- 18. 實體框架查詢包含實體集合的子實體
- 19. 實體框架,計算實體字段
- 20. 在實體框架中的查詢
- 21. 在可選屬性中搜索AppEngine中的實體
- 22. 實體框架按查詢中的行字段降序排列
- 23. 查詢一個特定的多值字段爲主要實體
- 24. Hibernate命名查詢(選擇所有實體不出現在其他實體中)
- 25. 如何使用DotConnect for PostgreSQL查詢實體框架實體的空字段值
- 26. .net實體查詢
- 27. 從實體查詢
- 28. 如何查詢實體框架中的實體4
- 29. Symfony2實體字段
- 30. 訪問Appengine NDB中刪除的實體
這看起來像是http://stackoverflow.com/questions/11775317/objectify-query-a-attribute-from-an-entity的副本。另外,重型數據存儲概念與rdbms不一樣。瞭解有關數據存儲查詢成本的更多信息。 – kctang