Zend_Cache_CoreとZend_Cache_Backend_Fileを使用して、データベースにアクセスするモデルクラスに対して実行されたクエリの結果をキャッシュしています。
基本的に、クエリ自体は、取得した結果をキャッシュするためのIDを形成する必要がありますが、問題は、クエリが長すぎることだけです。Zend_Cache_Backend_Fileは例外をスローせず、PHPは文句を言いませんが、キャッシュファイルは作成されません。
私はまったく効率的ではない解決策を考え出しました。実行されたクエリを自動インクリメントIDと一緒に、次のような別のファイルに保存します。
0->> SELECT*FROMテーブル1->>SELECT* FROM table1、table2 2->> SELECT*FROMテーブルWHEREfoo= bar
あなたはその考えを理解します。このように、私はすべてのクエリに対して一意のIDを持っています。挿入、削除、または更新が行われるたびにキャッシュをクリーンアップします。
これで、潜在的なボトルネックがここに表示されると確信しています。テストでは、ファイルシステムに対して2つ(または新しいIDを追加する必要がある場合は3つ)のリクエストがキャッシュから保存またはフェッチされます。これは、一緒にキャッシュする必要性を打ち負かす可能性さえあります。それで、ファイルシステムやデータベースに保存せずに、phpでクエリの一意のID、つまりはるかに短い表現を生成する方法はありますか?