2012-05-10 8 views
2

Ehcacheの2.5.x documentationでは、標準的な実装ではインデックス作成に頼ることなくキャッシュ検索機能が提供され、良好なパフォーマンスを実現しています(最大1M要素のキャッシュには<)。実験ではこの主張を検証します。しかし、これはより大きなキャッシュで(O(N)によって)低下します。検索可能なEhcacheインデックス - オプションは何ですか?

ドキュメントには、分散キャッシュ実装(「Terracotta Server Arrayによるバッキング」)を使用することで、インデックス作成の利点が得られると述べられています。しかし、1Mバイト以上の小さなサイズのキャッシュでは、分散を必要としない小さなキャッシュ(1Gbキャッシュに1.2M要素を収める)の解決策はないようです。

誰かがこのようなケースでインデックスを作成するための回避策や解決策を見つけたことがありますか?それとも、キャッシュを配布するというやや難解なアプローチが必要ですか?

このインデックス機能は、市販のテラコッタのライセンスを必要とするかどうかがまたちょっと不明だ(私ははっきりとはいえテラコッタの提供の部分はサポートなしで、無料で利用可能であることを印象の下にあった?)

+1

上記の沈黙から、商用ソフトウェアのためにシェルを外して、キャッシュを配布する必要がある以外の解決策がないことを理解していますか? このような単純な汎用メモリ内検索可能なキャッシュ機能を提供するEhcache以外のものについての推奨事項はありますか? – sxc731

答えて

1

私はEhCacheインデックス機能はTerracottaとは何の関係もないと思います。 EhCacheの核となる機能です。私はEhcacheとEhcacheの両方をTerracottaの商用バージョンに基づいて使用しています。

あなたはここであなたがsearcheableであるフィールドを指定する必要がありますehcache.xml設定(これはLuceneのインデックスの活動に新しいオブジェクトをキャッシュまたは更新/キャッシュに削除されるたびにトリガーされます)

サンプルを提供しませんこのような構成の一例(私はあなたの要件ごとに=「1024メートル」の設定maxBytesLocalHeapをしました):あなたがehcacheを、APIのテラコッタベースimplementatioを使用する場合

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache maxBytesLocalHeap="1024m"> 
<sizeOfPolicy maxDepth="2000" /> 
<defaultCache eternal="false" timeToLiveSeconds="600"/> 
<cache name="myCacheablePOJO" eternal="true" statistics="true"> 
    <searchable> 
    <searchAttribute name="field1" /> 
    <searchAttribute name="field2" /> 
    <searchAttribute name="field3" /> 
    </searchable> 
</cache> 
</ehcache> 

あなたがクラスパスに追加jarファイルを持っているにテラコッタを有効にする必要があります構成:

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache maxBytesLocalHeap="1.3g"> 
<sizeOfPolicy maxDepth="2000" /> 
<defaultCache eternal="false" timeToLiveSeconds="600"> 
    <terracotta/> 
</defaultCache> 
<cache name="myCacheablePOJO" eternal="true" statistics="true"> 
    <searchable> 
    <searchAttribute name="field1" /> 
    <searchAttribute name="field2" /> 
    <searchAttribute name="field3" /> 
    </searchable> 
    <terracotta compressionEnabled="true" /> 
</cache> 
</ehcache> 

cache name = "myCacheablePOJO"に「terracotta」タグを追加しました。キャッシュでオブジェクト圧縮を有効にするオプションの属性を使用しています(パフォーマンスがわずかなRAMスペースを節約します)。

つまり、Terracottaクラスタリングを使用しない場合は、ローカルEhCacheの1.2Mの要素でうまくいくはずです。 考慮すべき唯一の問題は、フェイルオーバーです。

  • 私のシステムキャッシング戦略とは何ですか?
  • JVMクラッシュの場合に、キャッシュされたデータが失われる可能性はありますか?
  • JVMの再起動時にローカルキャッシュにデータがどのように読み込まれますか?
+0

あなたの答えを「有用」とマークする前に、インデックス作成のためにルーネインデックス作成がどこで行われたか教えてください。? –

+0

Luceneエンジンは、テラコッタの検索可能なフィールドの内部インデックスエンジンとして使用されます。これはテラコッタの技術サポートチームと確認され、議論されました。 – user1697575

関連する問題