是否有适用于java的内存/缓存解决方案,允许以某种形式查询缓存中对象的特定属性?
我意识到这是一个完整的数据库将被用于的东西,但我希望能够通过数据库的查询能力获得缓存的速度/性能。
答案 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)
答案 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
这是一种数据集技术。它支持表格数据(来自数据库或在代码中构建),然后您可以构建针对数据集(和排序)的查询和过滤器,所有这些都在内存中。它快速且易于使用。最重要的是,您可以对数据集上的任何列或属性执行查询。