Objectify で GAE/Java を使用しています。キーを指定して、特定のオブジェクトがデータストアに存在するかどうかを確認する最速の方法を見つけようとしています。私が今行っているのは.get(key)
on@Cached
ですが、どちらの方法でもオブジェクト全体が取得されますが、これは不要です。
インデックスのみのヒットでこれを行う方法についてのアイデアはありますか? キーのみのクエリも考えていましたが、(システム ステータス ダッシュボードで) レイテンシがget
.
Objectify で GAE/Java を使用しています。キーを指定して、特定のオブジェクトがデータストアに存在するかどうかを確認する最速の方法を見つけようとしています。私が今行っているのは.get(key)
on@Cached
ですが、どちらの方法でもオブジェクト全体が取得されますが、これは不要です。
インデックスのみのヒットでこれを行う方法についてのアイデアはありますか? キーのみのクエリも考えていましたが、(システム ステータス ダッシュボードで) レイテンシがget
.
キャッシュをオンにして get() を実行するだけです。@PostLoad メソッドに多くの高価なロジックがない限り、キーのみのクエリであっても、データストアまでずっと移動するよりも、memcache からデータをフェッチする方が大幅に安価になります。キャッシュはあなたの友達です。
補足として、これは時期尚早の最適化のように思えます。最も便利なコードを使用してアプリを構築し、appstats を実行して、実際のコストがアプリケーションのどこにあるかを調べます。高価な部品があなたが思っているものではないことにおそらく気付くでしょう。
インデックスのみのヒットでこれを行う方法についてのアイデアはありますか? キーのみのクエリも考えていました
キーのみのクエリは、インデックスのみのヒットを取得する唯一の方法です。get よりも高速かどうかは、エンティティのサイズとインデックスのサイズによって異なります。些細な例では、取得に約 8 ミリ秒、クエリに 13 ミリ秒かかります。AppStats を使用して、実際のデータでどちらが安いかを判断できます。
フィルターをオンにしたキーのみのクエリは__key__
、ステータス ダッシュボードでベンチマークされたクエリよりも大幅に高速になります。単にエンティティを取得するよりも速いかどうかはわかりません - 試してみて、お知らせください!