1

我正在使用Google Cloud Endpoints(Java)作爲Android應用程序的後端。後端數據存儲到數據存儲區Google Cloud Endpoints with Android - 緩存響應?

問題是Android客戶端通常不會從後端接收到正確的數據。重複請求後,最終收到正確的數據。

你能告訴我什麼可能導致這個問題?雲終端庫中是否存在某種響應緩存?或者在數據存儲中緩存?

我看了一下最終一致性通過數據存儲提供,所以我試圖用查詢下一個請求之前更新實體後等待至少10秒鐘。夠了嗎?

非常感謝。如果你總是需要一個數據存儲查詢的結果是一致的,你需要在文章中使用祖先查詢按示例代碼:

Query query = new Query("Greeting", guestbookKey).setAncestor(guestbookKey); 

回答

1

聽起來好像您構建數據模型的方式不是符合您希望使用數據模型的方式。沒有看到你的數據模型的例子,我不能給你提示如何改變它,但這是一個簡單的例子,可以幫助你。

假設我有一個「Post」實體和一個「CommentForPost」實體。用戶可以爲每個Post條目創建多個CommentForPost條目。從邏輯上講,CommentForPost是Post的子級,但如果您不將Post作爲所有CommentForPost條目的祖先,則不保證立即一致性。如果用戶A創建評論然後查詢它們,他們可能不會馬上看到該條目。另一方面,如果您將Post實體作爲所有CommentForPost條目的父項,那麼您將保證立即一致性,因爲它們被保存爲單個EntityGroup。如果用戶A創建一個條目並立即進行查詢(使用Post鍵作爲祖先),那麼他們肯定會得到準確的數據。

這裏的限制是您只能夠每秒創建一個CommentForPost條目。這是給予和承擔的地方。如果短時間內需要大量更新,則無法保證一致性(例如100個用戶同時添加了CommentForPost條目)。如果你想保證一致性,那麼你不能在很短的時間內有很多更新。

有意義嗎?

+0

非常感謝!我想我沒有給予文檔足夠的關注。它現在確實有意義。你知道我是否可以更改現有數據的實體父項? – 2014-09-04 08:34:02

+0

不。這種關係是永久的。 – xsee 2014-09-04 14:26:33

2
直接從該文檔在 Structuring Data for Strong Consistency

不能依靠延遲來獲得一致性,因爲它取決於跨數據中心的複製,並且所花費的時間永遠也不會一致:)

+0

但是,如何在HTTP請求之間攜帶密鑰? – 2014-09-03 08:16:21

相關問題