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 を再起動した場合、データはローカル キャッシュにどのように取り込まれますか?