2014-06-24 43 views
0
Query q = new Query("Employees"); 
q.addFilter("is_active", FilterOperator.EQUAL, isActive); 
q.addSort("first_name", SortDirection.ASCENDING); 

如何實現祖先或任何其他方式來檢索Google App引擎(Java)中的最新更新?我必須用單一的實體只有..,

Employees employee = ofy().load().type(Employees.class).id("123").get(); 

這些類型的查詢用於檢索數據存儲的數據,但我不能得到最新的更新。

+0

如果我是正確的,那麼你需要Datastore最近修改的實體? – Bharath

+0

是的,如果我有時更新任何字段,它只給出最後更新(我在修改之前做了什麼)..,而不是最近更新.., – Saranya

+0

您是否只使用數據存儲的低級Api,而不是JDO? – Bharath

回答

0

對於範圍儲存庫查詢和偏移,您可以使用

Query q = new Query("Employees"); 
q.addFilter("is_active", FilterOperator.EQUAL, isActive); 
q.addSort("first_name", SortDirection.ASCENDING); 

PreparedQuery pq   = datastore.prepare(q); 
List<Employees> result = pq.asList(FetchOptions.Builder.withOffset(5).limit(5)); 

在那裏你可以指定你需要獲取和限制是要獲取

0

結果的數量聽起來偏移就像你正在尋找最終一致性的解決方案一樣。要獲得查詢的強一致性,您需要使用祖先查詢,這需要擁有祖先密鑰。

閱讀有關strong consistency here

在客觀化方面,通過ID獲取總是強一致。查詢將是,如果你採取以下做法強烈一致:

List<Employee> employees = ofy() 
      .load() 
      .type(Employee.class) 
      .ancestor(parentKey) 
      .filter("field", value) 
      .list() 

注意,使最終一致性查詢(即非祖先查詢)與當物化通過客觀化返回值將是正確的實體內容(即一致和最新),但是返回的實體將是最終一致查詢的結果。

要實現您的目標,您需要在某個軸上對員工進行分區,並將其用作祖先密鑰。您將面臨的主要問題是實體組每秒寫入一次的限制。

你也不需要父母的實體,只是一個關鍵。它不需要在數據存儲中作爲條目存在。

相關問題