2014-07-21 40 views
0

我使用appengine和objectify作爲我的應用程序的後端。當我在數據存儲中查詢時,我得到一個Entity對象,它具有所需行的數據。但是,使用物化我將如何查詢實體並從中獲得選定的文件?因爲查詢整個實體將會很繁重,並且需要更多的數據帶寬。例如:在具有4列的實體中, - > Id,名稱,描述,年齡。我應該詢問oly Id,姓名,年齡。我不想要描述被查詢。在實體中查詢實體中的選定字段 - appengine

+0

這看起來像是http://stackoverflow.com/questions/11775317/objectify-query-a-attribute-from-an-entity的副本。另外,重型數據存儲概念與rdbms不一樣。瞭解有關數據存儲查詢成本的更多信息。 – kctang

回答

1

如果您正在尋找投影查詢,它們還沒有在Objectify中實現。

https://groups.google.com/forum/#!topic/objectify-appengine/uvLIHhHMEM0

+0

請描述更詳細的答案,而不是鏈接到另一個討論站點。或者,在問題上使用評論功能。 –

+2

不知道爲什麼@jewirth低估了這一點,答案是現貨。 – koma

+0

我誤解了答案。感謝您指出@koma。 –

3

的GAE數據存儲不工作像一個RDBMS;你不能隨意選擇和選擇從實體中查詢哪些字段。數據存儲查詢的標準行爲是遵循一個索引(將屬性值映射到實體鍵),然後通過鍵來獲取所有找到的實體。

有一種稱爲「投影查詢」(Objectify支持的功能;查詢命令對象上的project()方法),但它不是像SQL中獲得的通用SELECT語句。投影查詢利用了索引本身包含索引值的事實,因此如果您只需要索引中的數據,則不需要執行整個實體的後續提取。但是,這帶有一些限制:

  • 您必須維護一個包含所有希望投影的數據的多屬性索引。
  • 您必須爲多屬性索引中的每個字段維護單一屬性索引。
  • 您只能在遵循該特定索引的查詢上進行投影。
  • 查詢繞過Objectify的基於內存緩存的實體緩存。

請注意使用投影查詢的成本。在您的示例中,您將需要Name和Age上的單一屬性索引以及{__key__, Name, Age}上的多屬性索引。每個實體寫入3個寫入操作,而新的實體將花費8個寫入操作。另一方面,投影查詢的成本是一個常量1讀操作。

其他另一方面,從memcache獲取的批量成本爲0,最壞的成本爲1讀操作。除非您的描述字段已知會導致您的問題,否則這是一個大規模的過早優化。