2

Ehcache の 2.5.xドキュメントには、その標準実装がインデックス作成に依存せずにキャッシュ検索機能を提供し、優れたパフォーマンス (最大 1M 要素のキャッシュで 1 秒未満) を実現すると述べられています。実験により、この主張が検証されます。ただし、キャッシュが大きいと、これは (O(N) によって) 低下します。

ドキュメントには、分散キャッシュの実装 ("Backed by the Terracotta Server Array") を使用すると、インデックス作成の利点が得られるとさらに記載されています。ただし、配布を必要としないほど十分に小さいサイズの 1M を超える要素の小さなキャッシュに対する解決策はないようです (私たちのキャッシュは ~1Gb のキャッシュに 1.2M の要素に適合します)。

そのような場合にインデックスを作成するための回避策/解決策を見つけた人はいますか、それともキャッシュを分散するというやや大ハンマーのアプローチが必要ですか?

また、このインデックス作成機能に商用の Terracotta ライセンスが必要かどうかについても少し不明です (Terracotta の一部は無料で利用できるという印象を受けましたが、明らかにサポートなしでしょうか?)

4

1 に答える 1

1

EhCache のインデックス機能は Terracotta とは何の関係もないと思います。EhCache のコア機能です。私はEhcacheとEhcacheの両方を使用しており、商用バージョンのTerracottaに支えられています。

ehcache.xml 構成を提供する場合、検索可能なフィールドを指定する必要があります (これにより、新しいオブジェクトがキャッシュされるか、キャッシュで更新/削除されるたびに、Lucene のインデックス作成アクティビティがトリガーされます)。

このような構成のサンプル例を次に示します (要件に従って maxBytesLocalHeap="1024m" をセットアップしました)。

<?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>

EhCache API の Terracotta ベースの実装を使用する場合は、クラスパスに追加の jar を用意し、構成で Terracotta を有効にする必要があります。

<?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>

「terracotta」タグをキャッシュ name="myCacheablePOJO" に追加し、オプションの属性を追加して、キャッシュ内のオブジェクト圧縮を有効にしたことに注意してください (わずかなパフォーマンス コストで RAM スペースを節約します)。

つまり、Terracotta クラスタリングなしで、ローカルの EhCache に 1.2M の要素があれば問題ないはずです。考慮する必要がある唯一の問題は、フェイルオーバーです。次の質問を自問する必要があります。

  • システムのキャッシング戦略は何ですか?
  • JVM がクラッシュした場合に、システムはキャッシュされたデータを失うことを許容できますか?
  • JVM を再起動した場合、データはローカル キャッシュにどのように取り込まれますか?
于 2012-09-26T15:20:04.417 に答える