ZWのCacheはSQLiteを使うべし

ZendFrameworkのZend_Cacheのバックエンド(いわゆるキャッシュの格納庫)には、FileとかSQLiteとかMemcached…とか指定して使うわけですが、自宅鯖や専用鯖とかならMemcachedとかAPCとかZendPlatformとかがよいと思いますが、共有鯖ではFileかSQLiteとかになっちゃうかと思います。

さて、今までZWのCacheを使うようになってからずっとFileをバックエンドにしてたんですが、先日SQLiteに変更しました。

というのは、どうもサイトが重いなぁ と思ってCIで要所要所の実行時間を計ってみたところ、なんと原因はこのキャッシュ周りでした。
キャッシュの読み込みではなく、書き込みの部分にかなりのコストが掛かっていたようです。
常に重いわけではなくて、新しいページを表示する度に・・・予想より時間が掛かってるなぁ程度だったので、まあWEBサービス周りでのやり取りとか混んでて排他制御に引っかかった待ちだろうなんて調べもせずに今まできてたんですが、ちゃんと調べればこんなところに原因が・・ってことですね。

ということで、ちょっとだけFileのバックエンドでパラメタを変えたりして調整してみたんですが、どうもファイル自体の書き込みアクセスが遅いようです。
その原因を探るのは大変なので、バックエンドをSQLiteにすることにしました。

というのは、どうもサイトが重いなぁ と思ってCIで要所要所の実行時間を計ってみたところ、なんと原因はこのキャッシュ周りでした。
キャッシュの読み込みではなく、書き込みの部分にかなりのコストが掛かっていたようです。
常 に重いわけではなくて、新しいページを表示する度に・・・予想より時間が掛かってるなぁ程度だったので、まあWEBサービス周りでのやり取りとか混んでて 排他制御に引っかかった待ちだろうなんて調べもせずに今まできてたんですが、ちゃんと調べればこんなところに原因が・・ってことですね。

ということで、ちょっとだけFileのバックエンドでパラメタを変えたりして調整してみたんですが、どうもファイル自体の書き込みアクセスが遅いようです。
その原因を探るのは大変なので、バックエンドをSQLiteにすることにしました。

その結果、「もうFileバックエンドは使いません。!」 と断言するぐらいに書き込みヒット時の応答速度が改善しました。

変更は難しいわけではなくてFileよりパラメタ少ないです、なんとDBの格納場所の指定だけです。

しかも、テーブルは自動的にSQLiteのバックエンドクラスが作成してくれますので、下準備はDBファイルが指定の格納庫に作成できるように書き込み権のチェックぐらいです。

メリットは、速度だけじゃありません。

FileバックエンドだとID毎にファイルが作られる(2つ)のでたくさんのキャッシュファイルが有効期限まで溜まるわけです。
もしろん、自動でクリーニングするようにしておかない場合はどこかでClean関数を呼ばないと溜まりまくるので気が付いたときにはファイル一覧表示さえままならんつう状況になったりします。(って、経験したし・・・  :-( )

今までだと結構な数が溜まる場合があるので、FTPでの一覧表示も大変でした。それがSQLiteだと1つのファイルで済むわけです。

但し、DB化になったことにより不要なキャッシュファイルだけをFTPで削除するなんてことはできなくなりますので、有効期限まで待つかSQLiteManagerとかで削除するかしか手がなくなります。
まあ、すべてのキャッシュが消えても問題はないのでDBファイルを消しちゃうっていう手でもいいかと思います。
デバック時とかはこの辺りがちょっと不便になりますが、それでも速度を考えればSQLiteにするべし! です。

ということで、Fileをバックエンドにしている方はSQLiteをお試しください。  :-P

プッシュ通知を