8

オブジェクトを保存して、すぐに保存されていることを確認しようとしていますが、機能していないようです。

これが私のオブジェクトです

import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;

@Entity
public class PlayerGroup {
    @Id public String n;//sharks
    public ArrayList<String> m;//members [39393,23932932,3223]

}

保存してすぐにロードしようとするコードは次のとおりです。

        playerGroup = new PlayerGroup();
        playerGroup.n = reqPlayerGroup.n;
        playerGroup.m = reqPlayerGroup.m;
        ofy().save().entity(playerGroup).now();
        response.i = playerGroup;
        PlayerGroup newOne = ofy().load().type(PlayerGroup.class).id(reqPlayerGroup.n).get();

ただし、「newOne」オブジェクトはnullです。保存が完了したばかりなのに。私は何が間違っているのですか?

--更新--後で(数分後のように)試してみると、オブジェクトが表示されることがありますが、保存した直後には表示されません。これは、高レプリケーションストレージと関係がありますか?

4

1 に答える 1

7

しばらく前に同じ振る舞いをしていて、グーグルグループで質問をしました-objectify

ここで私が得た答え:

You are seeing the eventual consistency of the High-Replication 
Datastore.  There has been a lot of discussion of this exact subject 
on the Objecify list in google groups , including several links to the 
Google documentation on the subject. 

Basically, any kind of query which does not include an ancestor() may 
return results from a stale view of the datastore. 

Jeff 

私はまた、行動に対処するための別の良い答えを得ました

削除の場合は、キーをクエリしてから、エンティティをバッチ取得します。getが強い一貫性に設定されていることを確認してください(これがデフォルトだと思いますが)。batch-getは、削除されたエンティティに対してnullを返す必要があります。追加すると、少し注意が必要になります。インデックスの更新には数秒かかる場合があります。AFAIK、これには3つの方法があります。1; 事前に計算された結果を使用します(クエリを完全に回避します)。次のビューがユーザーの最近作成されたエンティティである場合は、それらのキーのリストをユーザーエンティティに保持し、新しいエンティティが作成されたときにそのリストを更新します。そのリストは常に最新であり、クエリは必要ありません。古いインデックスを回避するだけでなく、これによりアプリの速度も向上します。確実に管理できる結果セットが多ければ多いほど、回避できるクエリも多くなります。

2; 最近追加されたエンティティを使用してクエリ結果を「拡張」することにより、レイテンシを非表示にします。エンティティを追加する速度に応じて、最新のキーのみを挿入するか、これを1のソリューションと組み合わせます。

3; クエリベースのビューに到達する前に、影響を受けていないビューをユーザーに案内して、待ち時間を隠します。この戦略には間違いなく匂いがあります。これらの追加の手順がユーザーに関連していることを確認する必要があります。そうしないと、エクスペリエンスが低下します。

蝶、ジョアキム

あなたはそれをすべてここで読むことができます:

オブジェクトを削除した後に非同期APIを使用しない場合、削除直後に実行されているクエリで取得されるか、追加した直後に取得されないのはなぜですか


同様の質問に対するもう1つの良い答えObjectifyは、今でも同期的に保存されません

于 2013-02-01T19:06:58.037 に答える