8

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

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

4

7 回答 7

4

JBoss Cache 具有搜索功能。它被称为 JBossCacheSearchable。从网站:

这是 JBoss Cache 和 Hibernate Search 之间的集成包。

目标是为 JBoss Cache 添加搜索功能。我们通过使用 Hibernate Search 在用户对象被添加到缓存和修改时为它们建立索引来实现这一点。通过传入有效的 Apache Lucene 查询来查询缓存,该查询随后用于搜索索引并从缓存中检索匹配的对象。

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

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

于 2009-04-01T07:24:31.327 回答
3

TerracottaGBeansPOJOCache

于 2009-04-04T15:16:09.430 回答
3

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

于 2013-05-18T19:49:19.410 回答
2

起初,我想到了HSQLDB,但那是内存中的关系数据库而不是对象数据库。不妨看看这份清单。那里有一些对象数据库,其中一个可能满足您的需求。

于 2009-03-31T13:44:26.613 回答
1

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

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

(来自这篇文章)。

于 2009-03-31T15:33:38.490 回答
0

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

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

Lucene 非常轻量级、高性能、线程安全且内存消耗低。

于 2009-04-03T18:54:30.207 回答
0

你可能想看看这个库:

http://casperdatasets.googlecode.com

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

于 2011-06-17T06:00:36.347 回答