2

これは非常に漠然とした質問ですが、非常に抽象的な答えを探しています。数か月前にGAEを使い始めて以来、私は常にmemcacheを役に立たず、不必要な面倒なこととして肩をすくめてきました。それはそれほど重要ではありません。しかし、memcacheは非常に有益な機能として賞賛されているようで、Googleは「高性能のスケーラブルなウェブアプリケーションは、一部のタスクで堅牢な永続ストレージの前または代わりに分散インメモリデータキャッシュを使用することが多い」とさえ言っています。これについては、検討する価値のあるものがあるに違いないと思いました。

わからない。パフォーマンスにはどのように役立ちますか?まず、memcacheに何かがあるかどうかを確認し、ない場合はクエリを実行する必要があります。私はいつも、それに対処する必要がなく、とにかくクエリを実行する方が速いと思っていましたが、これは単純なアプローチかもしれませんか?これはどのくらいの違いをもたらしますか?

私が理解できなかったことは、memcacheがどこで役立つかということだと思います。Stackoverflowのホームページでは、すべてのユーザーがほぼ同じものを見ることができるので、そのような状況でmemcacheを使用しないのは、実際にはばかげているので、どのように役立つかがわかります。しかし、Facebookのようなソーシャルネットワークを言ってください。すべてのユーザーは異なるものを見ます。2人が同じデータとコンテンツを見ることはなく、状況は非常に速く変化するため、memcacheはおそらく常に更新する必要があります。このようなシナリオでmemcacheはどのような役割を果たすことができますか?

また、ソーシャルネットワークのようなプライベートWebサイトでは、すべてのユーザーが異なる情報をmemcacheに保存する必要がある場合、memcacheは実際にどれだけ適合することができますか?GAEがmemcacheのサイズについて語っていないことは知っているので、何十万ものレコードを保存しても安全でしょうか?

4

2 に答える 2

7

頻繁に必要になる可能性のあるものにはmemcacheを使用します。memcacheに何かがあるかどうかを確認するのは高速です。memcacheからの取得は高速です。クエリを実行する手間を省くことができれば、時間を大幅に節約できます。

たとえば、次の2つのシナリオについて考えてみます。

  • 2人があなたのホームページをリクエストします。どちらのリクエストも、ページの読み込みの一部としてクエリを実行します。
  • 2人があなたのホームページをリクエストします。どちらもキャッシュをチェックします。1つはクエリを実行して保存し、もう1つはキャッシュされた結果を取得します。

memcacheから何かを取得する(または保存する)ためのBallpark時間は、約2〜3ミリ秒です。DBから何かを取得するためのボールパーク時間は100msです。

したがって、最初のシナリオでは、100ミリ秒x2=合計200ミリ秒になります。

2番目のシナリオでは、3ms(失敗したルックアップ)+ 100ms(クエリ)+ 3ms(ストア)+ 3ms(成功したルックアップ)=合計109msになります。

全体でほぼ50%節約できました。

ここで、おそらく10人があなたのホームページをリクエストするとします。最初のシナリオで追加された各人は、さらに100ミリ秒になります。2番目のシナリオの各人はわずか3ミリ秒です。


また、一度にページ全体をmemcacheに保存する必要がないことにも注意してください。ページの一部を保存することもできます。もちろん、すべてのユーザーがすべて同じデータを持っているわけではありませんが、ユーザー間で共有されるものは確かにいくつかあります。

于 2012-10-25T04:03:59.623 に答える
1

サイズ

memcacheのサイズに依存することはできません。各アプリに含まれるデータの量を把握するためにさまざまな試みが行われ、結果はさまざまです。

信頼性

信頼できません。memcacheエントリの有効期間は、一連のブラックボックス(ユーザーに対する)値に関連しています。たとえば、リクエストされる頻度や、最後のリクエストからの経過時間などです。

Googleは、頻繁に使用されるエントリを保持しようとし、(あなたの観点から)ランダムにそれらをmemcacheから削除します。

チップ

すべての人に共有されている、頻繁に要求されている、または計算に費用がかかるアイテムで使用してみてください。良い例はユーザーエンティティです。ユーザーのみが読み込まれるため、アプリを複数回操作する可能性があります。もう1つは、ユーザー固有のデータを配置するテンプレート、またはデータの一部のみが変更される場合はページ全体である可能性があります。Facebookの場合、テンプレート全体、「これらの友達はチャット中です」などのセクション、「このゲームを試してみたい」などの全社的なセグメント、または現在オンラインの多くの友達にプッシュされる新しい投稿などです。

エンティティのタイプごとに異なるキャッシュ期間を使用します。あるエンティティの有効期限を他のエンティティよりも短く設定することで、より長く維持するのに最も役立つAppEngineのヒント。キャッシュされたページは30秒間のみ有用であり、ユーザーエントリは1時間有用である可能性があります。

これは限られたリソースであり、Googleはすべての顧客の利益のために複数の顧客/アプリケーションにわたって最適化します。アプリがヒットせず、別のアプリがより多くのmemcacheを必要とする場合、Googleがmemcachedエントリを削除するのは合理的です。

于 2012-10-26T06:24:28.170 に答える