2014-11-19 6 views
0

JSP 웹 기반 응용 프로그램에서 Sesame을 사용하고 일관되게 사용되는 일부 쿼리를 캐시하는 방법이 있는지 알고 싶습니다.참깨 캐싱 일반 쿼리

+0

달성하고자하는 목표에 대해 좀 더 자세히 설명해 주시겠습니까? 정확한 설정과 정확히 무엇이 캐시되어야합니까? –

+0

"select? att? value where {placeid? att? value}"와 같은 일부 sparql 쿼리가 있습니다. 30 개 장소에 대해이 쿼리를 수행하고 사용 된 경우 "캐시"하고 싶습니다. –

답변

1

"캐시"하려는 것은 특정 값의 주어진 쿼리에 대해 결과 인입니다. 당신은 매우 쉽게 그러한 캐시를 직접 만들 수 있습니다. 다만 내부적으로 값 키에서지도는 HashMap에 대한 참조를 유지 일반 쿼리에 대한 클래스를 생성 (예를 들어, 귀하의 예제 쿼리에 대한 placeid) 쿼리 결과에 :

HashMap<URI, TupleQueryResult> cache = new HashMap<>(); 

그리고 당신이 할 모든 검사가, 주어진 장소 ID에 대해 캐시에 존재할 경우. 그렇지 않은 경우, 쿼리를 실행 결과를 다시 얻을 당신이 그 캐시에 넣을 수 MutableTupleQueryResult로 구체화 :

if (!cache.contains(placeId)) { 
     // reuse the prepared query with the specific binding for which we want a result 
     preparedQuery.setBinding("placeid", placeId); 

     // execute the query and add the result to a result object we can reuse multiple times 
     TupleQueryResult result = new MutableTupleQueryResult(preparedQuery.evaluate()); 

     // put the result in the cache. 
     cache.put(placeId, result); 
} 
return cache.get(placeId); 

당신이 (예를 들어, 뭔가 좀 더 정교한 무언가를 원하는 경우에 밖으로 던져 특정 시간이 지나면 캐시 된 항목 또는 캐시의 크기 제한이 설정 됨), HashMap 대신 Guava Cache과 같은 것을 사용했지만 기본 설정은 동일하게 유지됩니다.