SfPropelMemcachePluginプラグイン

ORMは悪である、またはSymfonyでPropelをキャッシュする 方法 」および「 Symfony でmemcacheおよびPropelと友達になった方法 」という記事で始めたトピックを続けます。





以前の記事で何が起こったのかについて簡単に説明します....

最初は、使用したプロジェクトはビューキャッシュを使用していました。 しかし、このアプローチは私と同僚に多くの不便をもたらしました。

  1. データ検証の複雑さ:データベースへの書き込み時には、さまざまな関連ブロックからデータをダンプする必要がありました。この混乱エラーが頻繁に発生したためです。
  2. キャッシュ内の余分なデータ:データベースからのデータではなく、html-resultがキャッシュされます。 データが多く、負荷が大きいほど、ロードに時間がかかります。 もちろんささいなことです。 しかし、それでも!


そこで、モデルをキャッシュすることにしました。 これには何が必要ですか? このテーマでPropelによって生成されたクラスを研究した後、PEERクラスにあるプールを使用することが決定されました。 ORM開発者が考えたように、このプールは作成されたオブジェクトをすでにデータベースに保存しています(isNew == false)。 PropelはdoSelect / One / ...メソッドを通してオブジェクトを受け取ったときにプールにオブジェクトを追加します。 同時に、retriveByPkメソッドが呼び出された場合にのみ、同じプール内のオブジェクトの存在を確認します。 これに基づいて、retriveByメソッドを使用する場合、一意のキーによるオブジェクトの関連付けもキャッシュを使用できます...(以前の記事でさらに詳しく)....



これらすべての結論の過程で、これをすべて実装するsfPropelMemcachePluginプラグインが作成されました。私の意見では非常に成功しています。

  1. キャッシュサイズが400 MB(これはキャッシュ設定の最大値)から100MBに減少しました。
  2. 検証に混乱はありません。 モデルが変更され、キャッシュが変更されました。 ほとんどの部分のテンプレートはキャッシュされず、タイプセットが簡単です。
  3. データベースへの単純なクエリは、主キー(または一意のキー)の大部分で使用されます。


プラグインは現在、主キー、一意キー、複合キーを使用したキャッシュをサポートしています。



プラグインはまだベータ版なので、厳密に判断しないでください。



本番環境でのプラグインの作業スケジュール。

ユーザーのキャッシュモデル、彼のプロファイル、国、地域、都市、写真(+アバター)、写真のフォルダー。



画像



画像



画像







プラグイン自体。



PS建設的な批判や提案に喜んで耳を傾けます。



All Articles