3

さて、Memcache についていくつか奇妙な質問があります。私のキャッシング手法の基本的な考え方は、PHP スクリプトが要求するデータを Memcached サーバーに保存することです。私と私のチームが直面した主な問題は、大量のデータを保存すると、Memcached のアイテム データ サイズの 1 MB 制限を超える場合があることです。このアプローチをさらに説明するために、次のことを想像してみてください。特定のオブジェクトを構成するための大量のデータがあり、そのデータには多数のテキストと数字が含まれています。そして、これらのオブジェクトのほぼ 200 項目を保存する必要があるため、最初に採用したアプローチは、200 程度のオブジェクト全体を Memcached の 1 つの大きな項目にキャッシュすることです。そのアイテムは 1Mb の制限を超える可能性があるため、新しいアプローチを採用できると考えました。私たちが行った新しいアプローチは、オブジェクトを構成するデータをより小さなビルディング ブロックに分解することです (そして、

質問は次のとおりです。より大きなデータを取得すると、GET 速度は変わりますか? それとも、オブジェクトを構成する複数のビルディング ブロックを取得するためにマルチ GET を使用するため、Memcached サーバーが並行して処理するリクエストの量の制限が 2 番目のアプローチの妨げになるのでしょうか?

これが奇妙な質問であることは承知していますが、使用するビルディング ブロックのサイズと、必要に応じてデータを追加するかどうかを決定するため、私たちが使用する新しいアプローチにとって重要です。

編集 1: 2 番目のアプローチで MULTIGET 関数を使用できるので、Memecached に接続して、取得するデータの各ビットに対する応答を待つ必要がないことに注意してください。そのため、並列リクエストを使用して複数のキーを取得します。

4

1 に答える 1

3

「一体何をmemcacheに保存しているのか、別のソリューションを使用しないのはなぜですか(メモリテーブルストレージエンジンを備えたDBなど)...

特にリモートノード/ホストで実行されている memcached では、複数のリクエストのコストが実際に懸念事項であると思います。大きなオブジェクトに対する単一のリクエストは、おそらく全体的により高速です。同じ量のデータを転送する必要がありますが、200 ピースに対して個別のリクエストのオーバーヘッドが追加されることはありません。

ところで... APC を使用していて、これらの巨大なアイテムをあまり持っていない場合は、memcache の代わりにそれを使用して、ローカル ユーザー レベルのメモリ キャッシュを実行できます。最大サイズは、php 構成設定で簡単に調整できます。ホスト間の分散アクセス/共有の利点は得られませんが、高速でシンプルです。

于 2012-10-30T15:28:59.713 に答える