Edd*_*ant 8 java database jpa in-memory-database
我们有一个系统通过调用另一个返回一组Java对象的系统上的接口来执行"粗略搜索".一旦我们收到搜索结果,我需要能够根据描述属性状态的某些标准进一步过滤生成的Java对象(例如,从初始对象返回所有对象,其中xy> z && ab == c).
每次用于过滤对象集的标准部分是用户可配置的,我的意思是用户将能够选择要匹配的值和范围,但是他们可以从中选择的属性将是固定集.
对于每次搜索,数据集可能包含<= 10,000个对象.搜索将由应用程序用户群手动执行,每天不超过2000次(大约).值得一提的是,结果集中的所有对象都是已知的域对象类,它们具有描述其结构和关系的Hibernate和JPA注释.
在我的头脑中,我可以想到3种方法:
选项1似乎涉及很多网络中的物理数据库(Oracle 10g),可能会导致大量的网络和磁盘活动.还需要将每次搜索的结果与其他结果集隔离,以确保不同的搜索不会相互干扰.
选项2原则上似乎是一个好主意,因为它允许我在内存中进行更精细的查询,并且不需要结果数据的持久性,只有在搜索完成后才会丢弃.Gut的感觉是,这可能也非常高效,但可能会导致更大的内存开销(这很好,因为我们可以非常灵活地调整JVM获得的内存量).
选项3可能非常高效,但是我想避免这样做,因为我们编写的任何代码都需要经过仔细的测试,以至于实现灵活且足够强大的时间可能会令人望而却步.
我没有时间对所有3个想法进行原型设计,因此我正在寻找人们对上述3个选项的评论,以及我未考虑过的任何进一步的想法,以帮助我确定哪个想法可能是最合适的.我目前正倾向于选项2(在内存数据库中),所以很想听到有人在内存中查询POJO的经验.
希望我已经详细描述了这种情况,但是不要犹豫,询问是否需要任何进一步的信息来更好地理解这种情况.
干杯,
埃德
精炼标准有多复杂?如果大多数都非常简单,我会很想从选项(3)开始,但要确保它封装在合适的接口后面,这样,如果您遇到过于复杂或效率低下而无法自己编写代码的东西,此时可以切换到内存数据库(如果设置临时表有开销,则可以批量切换到所有查询,或者仅切换到复杂的查询)。
归档时间: |
|
查看次数: |
816 次 |
最近记录: |