これまで、このようなキャッシュを使用したことはありません。問題は、データベースから500,000以上のレコードをロードし、いくつかの選択/フィルタリングを高速で実行したいということです。
10 に答える
彼らのリリースページから判断すると、OSCache は 2007 年以降積極的にメンテナンスされていません。これは良いことではありません。一方、EhCache は継続的に開発されています。その理由だけでも、私は EhCache を選びます。
2013 年 11 月の編集: OSCache は、他の OpenSymphony と同様に廃止されました。
どちらもかなり堅実なプロジェクトです。非常に基本的なキャッシングのニーズがある場合は、おそらくどちらか一方が他方と同様に機能します。
可能であれば、データベース クエリでフィルタリングを行うことも検討してください。多くの場合、500,000 行をメモリにロードしてからフィルタリングするよりも、より小さな結果セットを返すように調整されたクエリを使用すると、パフォーマンスが向上します。
私は JCS ( http://jakarta.apache.org/jcs/ ) を使用しましたが、しっかりしていてプログラム的に使いやすいようです。
それはあなたのニーズに依存します。1 台のマシンでメモリ内で作業を行っている場合、オーバーフローによってディスクのページング/スラッシングが発生しないように、十分な RAM または十分に高速なハードディスクがあれば、ehcache は完全に機能します。この特定の操作が頻繁に行われているにもかかわらず、スケーラビリティを達成する必要があることがわかった場合は、おそらくクラスタリングを実行する必要があります。JBoss の JGroups /TreeCache はこれをサポートしており、EHcache もサポートしています (私はそう思います)。Ehcache を terracotta で使用すると、非常に滑らかな統合であることが確実に機能することを私は知っています。この回答は、EHcache と OSCache のメリットを直接説明するものではありません。したがって、その回答は次のとおりです。そしてOSCacheは(少なくともある時点では)もう少し機能があるように見えましたが、上記のオプションを使用すると、これらの利点は意味がない/取って代わられたと思います. ああ、私が言及するのを忘れていたもう 1 つのことは、データのトランザクション性が重要であり、要件によって有効な選択肢のリストが洗練されるということです。
JSR 107 に準拠するキャッシュを選択すると、ある実装から別の実装に移行するときに作業が簡単になります。具体的には、より一般的で広く使用されている Java キャッシング ソリューションである Ehcache を使用してください。私たちはEhcacheを広範囲に使用しており、うまく機能しています。
他の回答では、キャッシュの長所と短所について説明しています。しかし、実際にキャッシュの恩恵を受けるかどうか疑問に思っています。ここで何をしようとしているのか、なぜキャッシュが有益なのかは明確ではありません。使用するデータ セットがある場合は、それにアクセスするだけです。キャッシュは、それ以外の場合は独立したタスク間で物事を再利用するのに役立ちます。これがあなたがしていることなら、はい、キャッシュが役に立ちます。しかし、それがデータ セットを運ぶことができる大きなタスクである場合、キャッシュは何の価値もありません。
私は、aopベースの構成を使用して、spring-modulesを使用するいくつかのspringプロジェクトでoscacheを使用しました。
最近、Spring3.xプロジェクトでoscache+ springモジュールを使用することを検討しましたが、spring-modulesアノテーションベースのキャッシングがサポートされていないことがわかりました(フォークでも)。
私は最近このプロジェクトについて知りました-
http://code.google.com/p/ehcache-spring-annotations/
これは、ehcacheを使用した宣言型アノテーションベースのキャッシングでSpring3.xをサポートします。
いずれにせよ、Spring モジュールで使用することをお勧めします。キャッシュはアプリケーションに対して透過的であり、キャッシュの実装は簡単に交換できます。OSCache と EHCache に加えて、Spring モジュールはギガスペースと JBoss キャッシュもサポートします。
比較については.... OSCache の方が構成が簡単 EHCache にはより多くの構成オプションがあります
どちらも堅牢で、ミラーリング キャッシュをサポートし、Terracotta で動作し、メモリ内キャッシュとディスクへのキャッシュをサポートします。
以前は Hibernate のデフォルトのキャッシュ プロバイダーだったので、私は主に EhCache を使用しています。Java-Source.netにキャッシュ ソリューションのリストがあります。
以前は、主要なキャッシング ソリューションを比較したリンクがありました。見つけたら、この回答を更新します。
OSCache は、数年前に放棄されたため、ほとんど死んでいます。Cacheonix をご覧ください。これは活発に開発されており、Web 層でのキャッシュをサポートする v.2.2.2 をリリースしたばかりです。私はコミッターなので、質問があれば連絡してください。