Lucene作为高容量缓存?

时间:2012-02-07 15:50:08

标签: java caching lucene batch-processing

我使用的系统我们进行了大量的批处理。我们有预先加载的缓存来帮助提高数据查找性能。但是有些情况我无法将整个数据集缓存到内存中。到目前为止,我一直在恢复运行查询来查找杀死性能的数据。为了解决这个问题,我添加了一个混合缓存,其中我使用HashMap达到阈值,然后我溢出到Lucene索引(本地文件系统)。这是运行查询的明显改进(比数据库查询快6到10倍)。但是,我希望能有所改善,并且想知道是否有更好的替代品来做这种事情。我使用单个String作为我的密钥并缓存Java对象。我想坚持使用Java库,以免使我的部署复杂化。 (我想避免单独的服务器进程。)我想知道是否有其他人正在使用Lucene用于此目的。对此有更好的选择吗?

3 个答案:

答案 0 :(得分:1)

我认为如果您使用单个字符串作为密钥而不需要在存储的数据中运行查询,则可以使用Google的LevelDB。它具有良好的性能和低内存使用率。检查一下:http://code.google.com/p/leveldb/

答案 1 :(得分:1)

如果达到某个阈值,有几个缓存库应该能够通过将缓存条目写入磁盘来处理您的情况。一个好的策略是将条目写入已租用的磁盘。还有一些缓存可以在集群上分配缓存条目,将所有内容保存在内存中。

我经常使用的缓存解决方案是Infinispan:http://www.jboss.org/infinispan

它快速,易于使用,可扩展,并且当然可以解决您的问题。

答案 2 :(得分:1)

EhCache!似乎非常适合我需要的东西。对于这种单键查找,它比Lucene表现得更好。它支持磁盘溢出,使用简单。