データ構造を永続的にRAMに保存し、Perlの事前にフォークされたWebサーバープロセスからアクセスできるようにしたいと思います。
理想的には、memcachedのように動作させたいのですが、別のデーモンは必要ありません。何か案は?
Cache::FastMmapを使用すると、必要なのはファイルだけです。mmapを使用して、IPC 用の共有メモリ内キャッシュを提供します。つまり、非常に高速です。考えられる問題と注意事項については、ドキュメントを参照してください。
IPC::SharedMemが適しているかもしれません。
Mod_perl は、コピー オン ライト フォークが適切に実装されたシステムで RAM を共有します。Perl ハッシュを mod_perl プログラムの BEGIN ブロックにロードすると、ハッシュを格納するページへの書き込みがない限り、mod_perl プログラムのフォークされたすべてのインスタンスがメモリを共有します。これは完全には機能しません (一部のページが書き込まれます) が、私のサーバーとデータでは、メモリ使用量が 70 ~ 80% 減少します。
Mod_perl はまた、後続の Web リクエストで Perl のコンパイル時間をなくすことで、サーバーを高速化します。mod_perl の欠点は、慎重にプログラミングし、グローバル変数を変更するプログラムを避ける必要があることです。これらの変数は、ハッシュと同様に、すべての mod_perl インスタンスで共有されるためです。とにかく、グローバルを変更する必要がないように十分な Perl を学ぶことは価値があります!
mod_perl によるパフォーマンスの向上は素晴らしいですが、mod_perl は多くの共有ホストでは利用できません。失敗するのは簡単で、学習中にデバッグするのは困難です。私は、パフォーマンスの向上が私の開発の苦痛を正当化するのに十分なほど顧客に評価された場合にのみ使用します。