Indexing 可搜索Ehcache索引-有哪些选项?

Indexing 可搜索Ehcache索引-有哪些选项?,indexing,ehcache,Indexing,Ehcache,Ehcache的2.5.x声明,它的标准实现提供了缓存搜索功能,而不依赖于索引,并且能够产生良好的性能(对于多达1M个元素的缓存,

Ehcache的2.5.x声明,它的标准实现提供了缓存搜索功能,而不依赖于索引,并且能够产生良好的性能(对于多达1M个元素的缓存,<1s)。实验证实了这一说法。但是,对于较大的缓存,这确实会降级(O(N))

文档进一步指出,通过使用分布式缓存实现(“由Terracotta服务器阵列支持”),可以获得索引的好处。但是,似乎没有一种解决方案可以用于超过1M个元素的较小缓存,其大小足够小,不需要分发(我们的方案可以在~1Gb缓存中容纳120万个元素)

是否有人找到了一种解决方法/解决方案来为此类情况提供索引,或者这是否需要采用某种程度的大锤式方法来分发缓存


关于此索引功能是否需要商业Terracotta许可证,还有一点不清楚(我的印象是Terracotta产品的部分内容是免费的,尽管显然没有支持?

我认为EhCache索引功能与Terracotta无关。它是EhCache的一个核心特性。我使用的是Ehcache和由Terracotta商业版支持的Ehcache

当您提供ehcache.xml配置时,您必须指定哪些字段是可搜索的(这将在每次缓存新对象或在缓存中更新/删除新对象时触发Lucene的索引活动)

以下是此类配置的示例(我已根据您的要求设置了maxBytesLocalHeap=“1024m”):


当您使用基于Terracotta的EhCache API实现时,您必须在类路径上有额外的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>

请注意,我在cache name=“myCacheablePOJO”中添加了“terracotta”标记,该标记带有一个可选属性,用于在缓存中启用对象压缩(节省ram空间,但性能成本很小)

因此,换句话说,在本地EhCache中有1.2M的元素,而没有Terracotta集群,您应该可以。 你应该考虑的唯一问题是故障转移。你应该问自己以下问题:

  • 我的系统缓存策略是什么
  • 在JVM崩溃的情况下,系统能够承受丢失缓存数据的代价吗
  • JVM重启时,如何在本地缓存中填充数据

我是否从上面的沉默中了解到,除了必须为商业软件买单,并且在没有物理要求时必须分发缓存之外,没有其他解决方案?这就引出了下面的问题:除了提供这种简单的通用可搜索内存缓存功能的Ehcache之外,还有什么其他建议吗?在我将您的答案标记为“有用”之前,请告诉我lucene索引在哪里/如何在索引中发挥作用“Lucene引擎用作Terracotta可搜索字段的内部索引引擎。这一点已得到确认,并与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>