2012-10-19 25 views
1

我在GAE上使用Objectify for Java。最近有一種情況,我刪除對象使用ofy().delete(),這是假設硬刪除數據存儲對象。硬刪除的對象仍然出現在AppEngine管理控制檯中

但是我仍然能夠在AppEngine的管理控制檯(數據存儲查看器)中看到這個硬刪除的對象。當我嘗試通過單擊ID /名稱列來擴展(編輯)該對象時,出現「此實體不存在」錯誤。我仍然可以使用ofy()。get()從數據存儲中檢索這個對象。

這是因爲索引沒有更新?

在此先感謝!

回答

2

您正在看到高複製數據存儲中查詢的最終一致性質。

這裏開始閱讀的好地方:https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency

+0

所以唯一的辦法,以確保沒有看到實體,是刪除它的交易?然後,如果我在該實體上運行get()(即使在事務外),我仍然可以看到該值,對嗎? – honzajde

+0

無論您是否處於事務中,Get-by-key都具有很強的一致性 - 儘管您可以通過使用事務來保證數據存儲的狀態。通過Objectify,你可以使用'Query.hybrid(true)'將查詢變成一個按鍵查詢+批處理。 Ofy將自動刪除在查詢結果中顯示但實際不存在的條目。 – stickfigure

+0

恩,謝謝。關於最終的一致性 - 如果我讓put() - eventualy一致,然後在事務內部調用get()在同一個鍵上 - 我保證得到我放的東西(我可以保證沒有其他寫入發生在這個實體)?我認爲理論上不是。有沒有可以給我一些保證(百分比)的實際界限(時間界限)? – honzajde

相關問題