Coherence过滤多个缓存

时间:2016-11-25 13:55:55

标签: oracle-coherence

我的应用程序中有两个缓存。我必须做一个AND过滤器,其中过滤器的左侧部分是高速缓存“A”,过滤器的右侧部分是高速缓存“B”。

这可以吗?

我目前的过滤器就像:

AllFilter(  
    AllFilter(  
        EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1),   
        EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C)  
    ),   
    AndFilter(  
        GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0),   
        OrFilter(  
            AndFilter(  
                EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S),   
                GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280)  
            ),   
            AndFilter(  
                EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N),   
                GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280)  
            )  
        )  
    )  
)  

问题是这个提取器必须对不同的缓存执行操作。如果所有条件都在同一个缓存中,则代码为:

list.addAll(cacheA.keySet(myFilter));

但实际上过滤器超过了三个不同的缓存:

cacheA -> 
    AllFilter(  
        EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1),   
        EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C)  
    )

cacheB -> 
    GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0)  

cacheC and CacheA -> 
    OrFilter(  
            AndFilter(  
                CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S),   
                CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280)  
            ),   
            AndFilter(  
                CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N),   
                CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280)  
            )  
        )  
    )  

最亲切的问候

1 个答案:

答案 0 :(得分:0)

最终你必须提出两个查询,如果你描述你的用例,这将有所帮助。

通过使用EntryProcessor访问多个缓存可以使其更好,这是缓存本身运行的代码,它可以提供更好的性能和完整性。

注意:两个缓存都属于同一个Service,否则无效。