缓存解决方案和查询

时间:2009-03-31 13:32:44

标签: java caching java-ee jboss glassfish

是否有适用于java的内存/缓存解决方案,允许以某种形式查询缓存中对象的特定属性?

我意识到这是一个完整的数据库将被用于的东西,但我希望能够通过数据库的查询能力获得缓存的速度/性能。

7 个答案:

答案 0 :(得分:4)

JBoss Cache具有搜索功能。它叫做JBossCacheSearchable。来自网站:

  

这是集成包   JBoss Cache和Hibernate之间   搜索。

     

目标是添加搜索功能   到JBoss Cache。我们实现了这个目标   使用Hibernate Search来索引用户   对象,因为它们被添加到缓存中   并修改。缓存由查询   传入有效的Apache Lucene查询   然后用于搜索   索引和检索匹配   来自缓存的对象。

主JBoss缓存页面:http://www.jboss.org/jbosscache/

JBossCacheSearch:http://www.jboss.org/community/docs/DOC-10286

答案 1 :(得分:3)

答案 2 :(得分:3)

现在答案应该更新为Infinispan,它是JBoss Cache的继承者,并且有很多改进的搜索技术。

答案 3 :(得分:2)

首先,我想到了HSQLDB,但这是一个内存中的关系数据库而不是对象数据库。可能想看看this list。那里有一些对象数据库,其中一个可能满足您的需求。

答案 4 :(得分:1)

在相当轻量级的java对象数据库中查看db4o。您甚至可以使用常规Java代码查询数据:

List students = database.query( new Predicate(){
      public boolean match(Student student){
        return student.getAge() < 20
          && student.getGrade().equals(gradeA);}})

(来自this article)。

答案 5 :(得分:0)

另一个想法是使用Lucene和Directory的RAMDirectory实现来索引你放入缓存的内容。这样,您就可以使用Lucene提供的所有搜索引擎查询功能进行查询。

在您的情况下,您可能会按原样索引对象的相关属性(不使用分析器)并使用布尔等于运算符进行查询。

Lucene非常轻巧,高性能,线程安全且内存消耗低。

答案 6 :(得分:0)

您可能想要查看此库:

http://casperdatasets.googlecode.com

这是一种数据集技术。它支持表格数据(来自数据库或在代码中构建),然后您可以构建针对数据集(和排序)的查询和过滤器,所有这些都在内存中。它快速且易于使用。最重要的是,您可以对数据集上的任何列或属性执行查询。