0

Eclipse を使用して、ローカル マシンで GAE データストアを操作しています。2 つのサーブレットを作成しました -AddMovieDeleteMovie:

ムービーを追加

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 サーブレットはすべてのムービーを削除するわけではありません。連続して呼び出すと{"numMoviesFound":"15"}、 、 then {"numMoviesFound":"9"}{"numMoviesFound":"3"}および finallyが返され{"numMoviesFound":"3"}ます。

一度にすべての映画がデータストアから削除されないのはなぜですか?

更新:この問題は、GAE サーバーではなく、ローカルの Eclipse でのみ発生するようです。

4

1 に答える 1

1

1 回のトランザクションですべてのムービーを削除する必要があると思います。これにより、一貫性が向上します。

一貫性について言えば、あなたの問題はここにあります:

Google App Engine の高レプリケーション データストア (HRD) は、複数のデータ センターにデータを同期的に保存することで、読み取りと書き込みの高可用性を提供します。ただし、書き込みがコミットされてからすべてのデータ センターで表示されるまでの遅延は、複数のエンティティ グループにまたがるクエリ (非祖先クエリ) が最終的に一貫した結果しか保証できないことを意味します。したがって、このようなクエリの結果は、基になるデータへの最近の変更を反映していない場合があります。

https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency

于 2013-04-22T13:54:17.297 に答える