2009-03-31 4 views
5

キャッシュ内のオブジェクトの特定の属性に対してクエリの形式を可能にするJava用のメモリ/キャッシュソリューションがありますか?キャッシングソリューションとクエリ

これは完全なデータベースが使用されていることを認識していますが、データベースのクエリ機能を使用してキャッシュの速度/パフォーマンスを向上させたいと考えています。

+0

あなたが求めるものは、単純なマップとどのように違いますか? 1つの値を返す1つのキーに限定して、Mapに対して基本クエリを実行できます。 –

+0

Paulの質問を拡張するには、クエリが単純な 'field = value'クエリか、 'field> value'または 'field1 = value1 AND NOT field2 = value2'のようなロジックが必要ですか? – joev

+0

より多くの論理が良い。 (フィールド> x、y <フィールド systemoutprintln

答えて

3

今日、答えはInfinispanに更新されるはずです。これはJBoss Cacheの後継バージョンで、検索技術が大幅に向上しました。

+0

はい、InfinispanはApache luceneを使用し、Hibernateはキャッシュされたオブジェクトを検索します。 –

2

まず、HSQLDBが気になりましたが、これはオブジェクトデータベースではなく、メモリ内のリレーショナルデータベースです。 this listを見たいかもしれません。そこにはいくつかのオブジェクトデータベースがあり、そのうちの1つはあなたのニーズを満たすかもしれません。

1

かなり軽量のJavaオブジェクトデータベースでdb4oをご覧ください。あなたも、通常のJavaコードを使用してデータを照会することができます

List students = database.query(new Predicate(){ 
     public boolean match(Student student){ 
     return student.getAge() < 20 
      && student.getGrade().equals(gradeA);}}) 

this articleから)。

4

JBoss Cacheには検索機能があります。これはJBossCacheSearchableと呼ばれています。サイトから:

これは、JBoss CacheとHibernateの 検索の統合パッケージ です。

目的は、JBoss Cacheに検索機能 を追加することです。これを実現するには、 でHibernate Searchを使用して、 というオブジェクトをキャッシュ に追加して変更したときにそのオブジェクトをインデックスします。キャッシュは、 が有効なApache Luceneクエリ を渡してクエリされ、 のインデックスを検索し、一致する オブジェクトをキャッシュから検索するために使用されます。

メインのJBoss Cacheのページ:http://www.jboss.org/jbosscache/

JBossCacheSearch:http://www.jboss.org/community/docs/DOC-10286

0

もう一つのアイデアは、あなたがあなたのキャッシュに入れどのインデックスにはLuceneとディレクトリのRAMDirectory実装を使用することです。そうすれば、Luceneが提供するすべての検索エンジンクエリ機能を使用してクエリを実行できます。

あなたの場合、オブジェクトの関連するプロパティをそのまま(アナライザを使用せずに)インデックス付けし、ブール値の等価演算子を使用してクエリすることができます。

Luceneは非常に軽量で、パフォーマンスが良く、スレッドセーフで、メモリ消費量が少ないです。あなたはこのライブラリをチェックアウトする場合があります

3

TerracottaまたはGBeansまたはPOJOCache

+1

、奇妙な。誰かが私に電子メールを送り、pojocacheにこのリンクを提供するように言った:http://www.samaxes.com/2009/03/17/jboss-pojocache-configuration/?私はなぜ彼らがここでコメントしただけではないのか分かりません。 –

0

http://casperdatasets.googlecode.com

これは、データセットの技術です。表形式のデータ(データベースかコードで構成されたもの)をサポートしているので、メモリ内のすべてのデータセット(およびソート)に対してクエリとフィルタを構築できます。その高速かつ使いやすいです。最も重要なことは、データセットのANY列または属性に対してクエリを実行できることです。