[英]GAE datastore: Entity deleted only after multiple calls to delete()
我正在使用Eclipse在本地計算機上使用GAE數據存儲。 我創建了兩個servlet- AddMovie
和DeleteMovie
:
Entity movie = new Entity("movie",System.currentTimeMillis());
movie.setProperty("name", "Hakeshset Beanan");
movie.setProperty("director", "Godard");
datastore.put(movie);
Query q = new Query("movie");
PreparedQuery pq = datastore.prepare(q);
List<Entity> movies = Lists.newArrayList(pq.asIterable());
response.put("numMoviesFound", String.valueOf(movies.size()));
for (Entity movie : movies) {
Key key = movie.getKey();
datastore.delete(key);
}
有趣的是,DeleteMovie servlet不會刪除所有電影。 連續調用返回{"numMoviesFound":"15"}
,然后返回{"numMoviesFound":"9"}
, {"numMoviesFound":"3"}
,最后返回{"numMoviesFound":"3"}
。
為什么沒有一次將所有電影從數據存儲區中刪除?
更新:問題似乎僅在本地Eclipse上發生,而不在GAE服務器上發生。
我認為您應該在一次交易中刪除所有電影,這樣可以確保更好的一致性。
說到一致性,您的問題就在這里:
Google App Engine的高復制數據存儲區(HRD)通過將數據同步存儲在多個數據中心中,為您的讀寫提供高可用性。 但是,從提交寫入到在所有數據中心中看到它之間的延遲意味着跨多個實體組的查詢(非祖先查詢)只能保證最終的結果一致。 因此,此類查詢的結果有時可能無法反映基礎數據的最新更改。
https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.