Zend_Cache
zendフレームワークを使用して、メモリ内のスクリプトキャッシュのソリューションを探しています。
このアプリケーションにはいくつかのケースがあります。たとえば、100個の要素を含むテーブルを表示するためのロジックは、次のとおりです。
- コンテンツテーブルから100個のアイテムをフェッチします(単一のクエリ)
- すべてのアイテムについて、作成者ユーザーと、db / memcacheバックエンドからコンテンツを承認したユーザーを取得します(これは通常、forループから実行されます)
ほとんどの場合、コンテンツを承認したユーザーは2人または3人の管理者ユーザーですが、スクリプトはデータベース/memecacheを複数回呼び出します。さらに悪いことに、ユーザーモデルは、ユーザーがどの役割に属し、どのコミュニティにも属しているかを知るために3つの異なるテーブルを照会する必要があります。
したがって、全体として、100アイテムのテーブルを表示するために、データベース(またはmemcacheサーバー)に600回クエリを実行します:-)
私はここで2つの解決策について考えていました:
ループ内のusersテーブルをクエリしないでください。100個のアイテムをループし、すべてのユーザーIDを取得し、1回のクエリですべてのユーザーを取得します。これが適切な解決策になるかどうかはわかりません。SQL結合を記述して、モデル関数が非を返すようにする必要が
Zend_Db_Table_Row
あるためです。これは、頻繁に使用します。別の解決策は、最初のロード時にユーザーオブジェクトをメモリ内キャッシュ配列に保存することです。次にループがユーザーIDを読み取ろうとすると、最初にこの「特別な」メモリキャッシュで検索されます。
Zend_Registry
ここでの解決策と同様に、キャッシュバックエンドとして使用することを考えていました: http ://sameerparwani.com/posts/using-zend_registry-as-a-zend_cache-backend
memcacheサーバーを使用しますが、スクリプトはmysqlデータベースにクエリを実行する代わりに、memcacheサーバーに数百回クエリを実行するだけです。memcacheサーバーにクエリを実行する方が高速ですが、スクリプトはすでにこのデータを読み込んでいるため、外部サーバーにクエリを実行するのではなく、スクリプト「メモリ」を使用したいと思います。