2009-03-31 9 views
5

私は、ネットワーク化されたデータベースからデータをロードする必要があるクライアントクラスで作業しています。クライアントに標準のキャッシングサービスを追加すると、パフォーマンスが向上する可能性があることが示唆されています。標準のサードパーティのPythonキャッシングクラスはありますか?

私は自分自身のキャッシングクラスを構築する必要がないのが大好きです。これらは共通の障害点を提供することはよく知られています。自社製のキャッシュシステムをデバッグするのに多大な時間を費やすよりも、他の誰かが開発したクラスを使用するほうがはるかに良いでしょう。これは、ストレージのすべての種類をサポートできる汎用高性能キャッシングクラスです http://ehcache.sourceforge.net/

Java開発者はこれを持っています。それは時間ベースの有効期限とガベージコレクションのための他の方法のオプションを持っています。それは本当によく見えます。残念ながら、私はPythonのためにこれが良いものは見つけられません。

誰かが、私が使用する準備ができているキャッシュクラスを提案することができます。私の希望リストは:

  • キャッシュ内のオブジェクトの数を制限する機能です。
  • キャッシュ内のオブジェクトの最大経過時間を制限する機能。
  • LRUよくデバッグストレージの複数のフォームを選択するオブジェクトexpirey
  • 能力(例えば、メモリ、ディスク)
  • は、ウェルの少なくとも1つの周知のアプリケーションによって使用され、維持されます。
  • 良好なパフォーマンス。

だから、どのような提案ですか?

更新:私はオブジェクトのローカルキャッシングを探しています。私が接続しているサーバーはすでに大量にキャッシュされています。 Windowsクライアントとサーバーの間に追加のネットワークトラフィックが必要なため、Memcachedは適切ではありません。

答えて

4

memcachedを使用し、cmemcacheを使用してアクセスすることをおすすめします。キャッシュ内のオブジェクトの数を必ずしも制限する必要はありませんが、有効期限を設定して、使用するメモリ量を制限することができます。 memcachedは多くの有名人によって使用されています。実際、私はそれを業界標準の一種と呼んでいます。

UPDATE

私は、オブジェクトのローカルキャッシングを探しています。

memcachedをローカルで実行し、localhost経由でアクセスできます。私はこれを数回やった。

それ以外は、私が考えることができる唯一の解決策はdjango's caching systemです。いくつかのバックエンドとその他の設定オプションを提供しています。しかし、それはあなたがdjangoを使用していない場合、少し重いかもしれません。

更新2:最後の手段として、jythonを使用して、Javaキャッシュシステムにアクセスすることもできます。あなたがすでにCPythonを使っているクライアントを持っているなら、これは少し難しいかもしれません。

UPDATE 3:は、それはあなたに有用であることが、おそらく少し遅れだが、私の以前の雇用主は、この種のもののために​​を使用しました。これは実際のデータベースですが、読み取りパフォーマンスはキャッシングに役立つほど速いです。

+0

この場合は適切ではありません...私はローカルキャッシュを追加してネットワークアプリケーションを高速化しようとしています。ネットワークキャッシュは、世界中のどこにいても、エンドユーザーにとっては遅くなるでしょう。 –

+0

悲しいことに、この段階でJythonを使用するのは複雑です。 –

関連する問題