Class DatasetGraphCache

java.lang.Object
org.apache.jena.sparql.core.DatasetGraphWrapper
org.aksw.jenax.arq.util.dataset.DatasetGraphWrapperFindBase
org.aksw.jenax.arq.dataset.cache.DatasetGraphCache
All Implemented Interfaces:
org.apache.jena.atlas.lib.Closeable, org.apache.jena.atlas.lib.Sync, org.apache.jena.sparql.core.DatasetGraph, org.apache.jena.sparql.core.Transactional

public class DatasetGraphCache extends DatasetGraphWrapperFindBase
A wrapper that caches the result of DatasetGraphWrapperFindBase.find(Node, Node, Node, Node) calls for a configurable set of CachePatterns. This implementation does not perform any subsumption checks. A cache for (IN IN owl:sameAs ANY) is presently not applicable for a lookup with e.g. (foo bar owl:sameAs baz) because baz is more specific than ANY. Upon caching, the full result set will be immediately consumed and put into the cache. Hence, this cache should only be used with patterns that lead to small result sets.
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.apache.jena.sparql.core.Transactional

    org.apache.jena.sparql.core.Transactional.Promote
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>>
     
    protected Supplier<com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>>>
    (CachePattern, In-Tuple) -> Quad
    protected long
     
     
    protected AtomicLong
     
    static final int
     
    protected long
     
    protected boolean
    In tabling mode all data matching the configured patterns is prefetched.
    static boolean
     
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    DatasetGraphCache(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns, Supplier<com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>>> cacheFactory, boolean isTablingMode)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    protected Iterator<org.apache.jena.sparql.core.Quad>
    actionFind(boolean ng, org.apache.jena.graph.Node mg, org.apache.jena.graph.Node ms, org.apache.jena.graph.Node mp, org.apache.jena.graph.Node mo)
     
    void
    add(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
     
    void
    add(org.apache.jena.sparql.core.Quad quad)
     
    void
    addAll(org.apache.jena.sparql.core.DatasetGraph src)
     
    cache(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns)
     
    cache(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns, int maxCacheSize)
     
    create(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns, long maxCacheSize, boolean isTablingMode)
     
    void
    delete(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
     
    void
    delete(org.apache.jena.sparql.core.Quad quad)
     
    void
    deleteAny(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
     
    com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>>
     
    protected Stream<CachePattern>
    getMatchingCachePatterns(org.apache.jena.graph.Node mg, org.apache.jena.graph.Node ms, org.apache.jena.graph.Node mp, org.apache.jena.graph.Node mo)
     
    protected Stream<CachePattern>
    getSuperPatterns(org.apache.jena.graph.Node mg, org.apache.jena.graph.Node ms, org.apache.jena.graph.Node mp, org.apache.jena.graph.Node mo)
     
    boolean
     
    boolean
    mayContainQuad(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
     
    boolean
    mayContainQuad(org.apache.jena.sparql.core.Quad rawQuad)
    This method always returns true unless in tabeling mode.
    protected void
     
    table(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns)
     
    table(org.apache.jena.sparql.core.DatasetGraph base, CachePattern cachePatterns)
     

    Methods inherited from class org.aksw.jenax.arq.util.dataset.DatasetGraphWrapperFindBase

    contains, contains, delegateFind, find, find, find, find, findNG, getDefaultGraph, getGraph, getUnionGraph

    Methods inherited from class org.apache.jena.sparql.core.DatasetGraphWrapper

    addGraph, begin, begin, begin, clear, close, commit, containsGraph, end, get, getBase, getBaseForQuery, getContext, getCxt, getG, getLock, getR, getT, getW, getWrapped, isEmpty, isInTransaction, listGraphNodes, prefixes, promote, promote, removeGraph, size, supportsTransactionAbort, supportsTransactions, sync, toString, transactionMode, transactionType, unwrap

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.apache.jena.sparql.core.DatasetGraph

    stream, stream

    Methods inherited from interface org.apache.jena.sparql.core.Transactional

    calc, calculate, calculateRead, calculateWrite, exec, execute, executeRead, executeWrite
  • Field Details

    • logCacheStats

      public static boolean logCacheStats
    • findCounter

      protected long findCounter
    • cacheFactory

      protected Supplier<com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>>> cacheFactory
      (CachePattern, In-Tuple) -> Quad
    • cache

      protected com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>> cache
    • cacheVersion

      protected AtomicLong cacheVersion
    • cacheGeneration

      protected volatile long cacheGeneration
    • isTablingMode

      protected boolean isTablingMode
      In tabling mode all data matching the configured patterns is prefetched. This way, lookups that match the cache patterns can always be answered from the cache alone; especially, if for such a lookup there is no cache entry then no request to the backend needs to be made. If tabling is enabled then the cache should have unlimited size.
    • cachePatterns

      protected Collection<CachePattern> cachePatterns
    • DFT_MAX_CACHE_SIZE

      public static final int DFT_MAX_CACHE_SIZE
      See Also:
  • Constructor Details

    • DatasetGraphCache

      protected DatasetGraphCache(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns, Supplier<com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>>> cacheFactory, boolean isTablingMode)
  • Method Details

    • cache

      public static DatasetGraphCache cache(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns)
    • cache

      public static DatasetGraphCache cache(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns, int maxCacheSize)
    • table

      public static DatasetGraphCache table(org.apache.jena.sparql.core.DatasetGraph base, CachePattern cachePatterns)
    • table

      public static DatasetGraphCache table(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns)
    • create

      public static DatasetGraphCache create(org.apache.jena.sparql.core.DatasetGraph base, Collection<CachePattern> cachePatterns, long maxCacheSize, boolean isTablingMode)
    • isTablingMode

      public boolean isTablingMode()
    • mayContainQuad

      public boolean mayContainQuad(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
    • nextGeneration

      protected void nextGeneration()
    • add

      public void add(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
      Specified by:
      add in interface org.apache.jena.sparql.core.DatasetGraph
      Overrides:
      add in class org.apache.jena.sparql.core.DatasetGraphWrapper
    • delete

      public void delete(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
      Specified by:
      delete in interface org.apache.jena.sparql.core.DatasetGraph
      Overrides:
      delete in class org.apache.jena.sparql.core.DatasetGraphWrapper
    • addAll

      public void addAll(org.apache.jena.sparql.core.DatasetGraph src)
    • deleteAny

      public void deleteAny(org.apache.jena.graph.Node g, org.apache.jena.graph.Node s, org.apache.jena.graph.Node p, org.apache.jena.graph.Node o)
      Specified by:
      deleteAny in interface org.apache.jena.sparql.core.DatasetGraph
      Overrides:
      deleteAny in class org.apache.jena.sparql.core.DatasetGraphWrapper
    • add

      public void add(org.apache.jena.sparql.core.Quad quad)
      Specified by:
      add in interface org.apache.jena.sparql.core.DatasetGraph
      Overrides:
      add in class org.apache.jena.sparql.core.DatasetGraphWrapper
    • delete

      public void delete(org.apache.jena.sparql.core.Quad quad)
      Specified by:
      delete in interface org.apache.jena.sparql.core.DatasetGraph
      Overrides:
      delete in class org.apache.jena.sparql.core.DatasetGraphWrapper
    • abort

      public void abort()
      Specified by:
      abort in interface org.apache.jena.sparql.core.Transactional
      Overrides:
      abort in class org.apache.jena.sparql.core.DatasetGraphWrapper
    • mayContainQuad

      public boolean mayContainQuad(org.apache.jena.sparql.core.Quad rawQuad)
      This method always returns true unless in tabeling mode. If false then the wrapped dataset does not contain this quad. If the argument quad contains placeholders only a check is made for whether the partition key exists in the cache. The set of cached entries is NOT iterated.
    • getMatchingCachePatterns

      protected Stream<CachePattern> getMatchingCachePatterns(org.apache.jena.graph.Node mg, org.apache.jena.graph.Node ms, org.apache.jena.graph.Node mp, org.apache.jena.graph.Node mo)
    • getSuperPatterns

      protected Stream<CachePattern> getSuperPatterns(org.apache.jena.graph.Node mg, org.apache.jena.graph.Node ms, org.apache.jena.graph.Node mp, org.apache.jena.graph.Node mo)
    • actionFind

      protected Iterator<org.apache.jena.sparql.core.Quad> actionFind(boolean ng, org.apache.jena.graph.Node mg, org.apache.jena.graph.Node ms, org.apache.jena.graph.Node mp, org.apache.jena.graph.Node mo)
      Specified by:
      actionFind in class DatasetGraphWrapperFindBase
      Parameters:
      ng - Controls the meaning of Node.ANY for g: If false then it matches all graphs including the default graph. When true it only matches within named graphs (and not the default graph).
    • ensureFilledTables

      public com.google.common.cache.Cache<Map.Entry<org.apache.jena.sparql.core.Quad,org.apache.jena.atlas.lib.tuple.Tuple<org.apache.jena.graph.Node>>,Set<org.apache.jena.sparql.core.Quad>> ensureFilledTables()