public abstract class SubsetSubqueryCache extends Object implements SubqueryCache
For example, suppose the cache is empty at the beginning. Firstly, prop1_idx:multiKSQ[1]@100 query leads to a cache miss, and then results are loaded into cache. Secondly, prop1_idx:multiKSQ[1]@20 query leads to a cache hit, and then first 20 results of cached responses are returned. Thirdly, prop1_idx:multiKSQ[1]@2000 leads to a cache miss, then results are loaded into cache, and initial results saved by prop1_idx:multiKSQ[1]@100 query are overriden by the new results.
Internally, raw query results are encapsulated in SubqueryResult
object together with limit of the query.
Meanwhile, keys are stored without limit (or with a dummy limit). Whenever there is a hit for key, the limit of
cached results and that of the query will be compared, and whether this is a cache hit or miss will be determined.
Compared to a simply JointIndexQuery.Subquery
to List<Object>
mapping, this cache has two benefits:
1) it reduces latency, as "subset" queries can effectively leverage cached results.
2) it saves space, as queries only differing in limit will not be saved more than once in cache.
Constructor and Description |
---|
SubsetSubqueryCache() |
Modifier and Type | Method and Description |
---|---|
protected abstract org.janusgraph.graphdb.transaction.subquerycache.SubsetSubqueryCache.SubqueryResult |
get(JointIndexQuery.Subquery key) |
List<Object> |
get(JointIndexQuery.Subquery key,
Callable<? extends List<Object>> valueLoader)
Returns a list of results.
|
List<Object> |
getIfPresent(JointIndexQuery.Subquery key)
Return a list of results if given query exists in cache, otherwise
return null
|
void |
put(JointIndexQuery.Subquery key,
List<Object> values)
Add given values into cache
|
protected abstract void |
put(JointIndexQuery.Subquery key,
org.janusgraph.graphdb.transaction.subquerycache.SubsetSubqueryCache.SubqueryResult result) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close
protected abstract org.janusgraph.graphdb.transaction.subquerycache.SubsetSubqueryCache.SubqueryResult get(JointIndexQuery.Subquery key)
protected abstract void put(JointIndexQuery.Subquery key, org.janusgraph.graphdb.transaction.subquerycache.SubsetSubqueryCache.SubqueryResult result)
public List<Object> getIfPresent(JointIndexQuery.Subquery key)
SubqueryCache
getIfPresent
in interface SubqueryCache
key
- a subquery of joint index querypublic void put(JointIndexQuery.Subquery key, List<Object> values)
SubqueryCache
put
in interface SubqueryCache
key
- a subquery of joint index queryvalues
- a list of results to be cachedpublic List<Object> get(JointIndexQuery.Subquery key, Callable<? extends List<Object>> valueLoader) throws Exception
SubqueryCache
get
in interface SubqueryCache
key
- a subquery of joint index queryvalueLoader
- a callable that returns a list of resultsException
- if exception thrown when calling the value loaderCopyright © 2012–2024. All rights reserved.