2016-10-18 10 views
1

Objectifyは、GoogleのデータストアにJavaオブジェクトを格納するGoogleのAPI /サービスです。最初は、私の操作は以前は高速でした(数十ミリ秒)。今、彼らは遅くなっています(400〜600ミリ秒)。また、Objectifyは、1つの操作を複数の操作に変換します。問合せは索引内のエンティティIDを検索してから、いくつかのエンティティをmemcacheおよび他のエンティティからデータ・ストアから取り出します。フィールドには、作成される操作の数に影響を与える注釈があります。パフォーマンスのために何かが間違っている可能性のある場所がたくさんあります。Objectifyのパフォーマンスを分析するにはどうすればよいですか?

Objectifyが実際にパフォーマンスを向上させ、請求を減らすためにどのように機能するかについて、どのように洞察することができますか?

私はObjectifyのドキュメントを見て、広範にウェブを検索しました。 Objectifyクエリを診断する方法を見つけることができませんでした。

+0

Havaeでは、低Datastore APIを使用して同じクエリを実行しようとしましたか?この方法で、最も遅い部分がDatastore自体かObjectifyフレームワークかを特定できます –

+0

実行している操作は何ですか?すべてのエンティティを取り戻していますか?何も変更されていない場合は、 – Robert

+0

私はまだ低いDatastore APIを学んでいません。 私はエンティティ全体を取り戻しています。私が見ることができるのは、店舗内のエンティティの数です。インデックスはハッシュを使用しませんが、より多くのインデックス付きエンティティでは遅くなるべきではありませんか? –

答えて

0

GAE RPCコールのスタックドライバ分析を見て、カバーの下で何が起こっているのかを見てください。生の操作のリストが表示されます。

実際には、パフォーマンスが悪くなる可能性のある明白でない場所はあまりありません。ハイブリッドクエリ(クエリーをキーオンリークエリに続けてバッチ取得する)は、@Cacheエンティティにのみ適用されます。哲学は簡単です。エンティティをキャッシュするのが効率的であれば、可能な限りキャッシュを使用することはおそらく効率的です。わからない場合は、@Cacheを削除してください。

それ以外の場合、Objectifyは低レベルのEntityオブジェクトをPOJOに変換するだけです。これは合理的に効率的ですが、あなたは確かに病理学的症例を構築することができます。長くて高価なライフサイクルメソッド(@OnLoadと友人)に注意してください。ネストリストのリストなどは、簡単にO(N^3)操作を作成できます。しかし、これらは作成時には明白です。特にRef<?>オブジェクトで@Loadを使用している場合。負荷は無料ではありません。

+0

ありがとうございます。スタックドライバーの分析は、私が探していたものでした。 HTTPリクエストごとに、生成されたデータストアとmemcacheの操作を表示します。 これは独自の質問かもしれません。 stackdriverタイムラインは、Objectifyがmemcacheですべてのデータを満たすことを示しています。 memcacheの操作には4msかかりました。これは、私がハッシュ・ルックアップを期待しているものです。 ここは謎です。私はそのObjectify呼び出しの前後にロギング行を置いています。 Objectifyの呼び出し全体が200msかかりました。これらの追加の196msで何が起こっているのか、どうすればわかりますか? –

関連する問題