You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2013/12/20 22:28:26 UTC

git commit: performance improvements, but disabled query cache for now as it has heavy influence on importing

Updated Branches:
  refs/heads/develop 3db71241d -> 9a7dbd295


performance improvements, but disabled query cache for now as it has heavy influence on importing


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/9a7dbd29
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/9a7dbd29
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/9a7dbd29

Branch: refs/heads/develop
Commit: 9a7dbd29506685df51b4dc63639e6b8d37ac1a17
Parents: 3db7124
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Fri Dec 20 22:28:20 2013 +0100
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Fri Dec 20 22:28:20 2013 +0100

----------------------------------------------------------------------
 .../kiwi/caching/sail/KiWiCachingSail.java      |  71 +++++---
 .../caching/sail/KiWiCachingSailConnection.java | 169 +++++++++++++------
 .../marmotta/kiwi/caching/KiWiCacheManager.java |  21 +--
 .../kiwi/model/rdf/KiWiUriResource.java         |  12 +-
 .../kiwi/persistence/KiWiConnection.java        |  10 +-
 .../backend/kiwi/KiWiStoreProvider.java         |   4 +-
 6 files changed, 189 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/9a7dbd29/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSail.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSail.java b/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSail.java
index 3870e78..fbc7289 100644
--- a/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSail.java
+++ b/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSail.java
@@ -21,9 +21,12 @@ import org.apache.marmotta.kiwi.caching.config.KiWiQueryCacheConfiguration;
 import org.apache.marmotta.kiwi.caching.transaction.GeronimoTransactionManagerLookup;
 import org.apache.marmotta.kiwi.sail.KiWiStore;
 import org.infinispan.Cache;
+import org.infinispan.configuration.cache.CacheMode;
 import org.infinispan.configuration.cache.Configuration;
 import org.infinispan.configuration.cache.ConfigurationBuilder;
 import org.infinispan.configuration.cache.VersioningScheme;
+import org.infinispan.context.Flag;
+import org.infinispan.distribution.ch.SyncConsistentHashFactory;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.transaction.TransactionMode;
 import org.infinispan.util.concurrent.IsolationLevel;
@@ -91,27 +94,55 @@ public class KiWiCachingSail extends NotifyingSailWrapper {
      */
     private Cache getQueryCache() {
         if(!cacheManager.cacheExists(QUERY_CACHE)) {
-            Configuration tripleConfiguration = new ConfigurationBuilder().read(cacheManager.getDefaultCacheConfiguration())
-                    .storeAsBinary()
-                    .transaction()
-                        .transactionMode(TransactionMode.TRANSACTIONAL)
-                        .transactionManagerLookup(new GeronimoTransactionManagerLookup())
-                        .cacheStopTimeout(1, TimeUnit.SECONDS)
-                    .locking()
-                        .isolationLevel(IsolationLevel.READ_COMMITTED)
-                        .concurrencyLevel(5)
-                    .versioning()
-                        .enabled(true)
-                        .scheme(VersioningScheme.SIMPLE)
-                    .eviction()
-                    .   maxEntries(configuration.getMaxCacheSize())
-                    .expiration()
-                        .lifespan(60, TimeUnit.MINUTES)
-                        .maxIdle(30, TimeUnit.MINUTES)
-                    .build();
-            cacheManager.defineConfiguration(QUERY_CACHE, tripleConfiguration);
+            if(parent.getPersistence().getConfiguration().isClustered()) {
+                Configuration tripleConfiguration = new ConfigurationBuilder()
+                        .clustering()
+                            .cacheMode(CacheMode.DIST_SYNC)
+                            .sync()
+                                .replTimeout(60, TimeUnit.SECONDS)
+                            .hash()
+                                .numOwners(2)
+                                .numSegments(40)
+                                .consistentHashFactory(new SyncConsistentHashFactory())
+                        .transaction()
+                            .transactionMode(TransactionMode.TRANSACTIONAL)
+                            .transactionManagerLookup(new GeronimoTransactionManagerLookup())
+                            .cacheStopTimeout(1, TimeUnit.SECONDS)
+                        .locking()
+                            .isolationLevel(IsolationLevel.READ_COMMITTED)
+                            .concurrencyLevel(5)
+                        .versioning()
+                            .enabled(true)
+                            .scheme(VersioningScheme.SIMPLE)
+                        .eviction()
+                            .maxEntries(configuration.getMaxCacheSize())
+                        .expiration()
+                            .lifespan(60, TimeUnit.MINUTES)
+                            .maxIdle(30, TimeUnit.MINUTES)
+                        .build();
+                cacheManager.defineConfiguration(QUERY_CACHE, tripleConfiguration);
+            } else {
+                Configuration tripleConfiguration = new ConfigurationBuilder().read(cacheManager.getDefaultCacheConfiguration())
+                        .transaction()
+                            .transactionMode(TransactionMode.TRANSACTIONAL)
+                            .transactionManagerLookup(new GeronimoTransactionManagerLookup())
+                            .cacheStopTimeout(1, TimeUnit.SECONDS)
+                        .locking()
+                            .isolationLevel(IsolationLevel.READ_COMMITTED)
+                            .concurrencyLevel(5)
+                        .versioning()
+                            .enabled(true)
+                            .scheme(VersioningScheme.SIMPLE)
+                        .eviction()
+                            .maxEntries(configuration.getMaxCacheSize())
+                        .expiration()
+                            .lifespan(60, TimeUnit.MINUTES)
+                            .maxIdle(30, TimeUnit.MINUTES)
+                        .build();
+                cacheManager.defineConfiguration(QUERY_CACHE, tripleConfiguration);
+            }
         }
-        return cacheManager.getCache(QUERY_CACHE);
+        return cacheManager.getCache(QUERY_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/9a7dbd29/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSailConnection.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSailConnection.java b/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSailConnection.java
index d0153dd..d1dc908 100644
--- a/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSailConnection.java
+++ b/libraries/kiwi/kiwi-caching/src/main/java/org/apache/marmotta/kiwi/caching/sail/KiWiCachingSailConnection.java
@@ -17,7 +17,7 @@
 
 package org.apache.marmotta.kiwi.caching.sail;
 
-import com.google.common.collect.ImmutableList;
+import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 import info.aduna.iteration.CloseableIteration;
 import info.aduna.iteration.Iteration;
@@ -27,6 +27,8 @@ import org.apache.marmotta.commons.sesame.tripletable.IntArray;
 import org.apache.marmotta.kiwi.caching.iteration.BufferingIteration;
 import org.apache.marmotta.kiwi.caching.iteration.CachingIteration;
 import org.apache.marmotta.kiwi.model.rdf.KiWiTriple;
+import org.apache.marmotta.kiwi.persistence.KiWiConnection;
+import org.apache.marmotta.kiwi.sail.KiWiSailConnection;
 import org.infinispan.Cache;
 import org.openrdf.model.Resource;
 import org.openrdf.model.Statement;
@@ -34,14 +36,17 @@ import org.openrdf.model.URI;
 import org.openrdf.model.Value;
 import org.openrdf.model.impl.URIImpl;
 import org.openrdf.sail.NotifyingSailConnection;
+import org.openrdf.sail.SailConnection;
 import org.openrdf.sail.SailConnectionListener;
 import org.openrdf.sail.SailException;
 import org.openrdf.sail.helpers.NotifyingSailConnectionWrapper;
+import org.openrdf.sail.helpers.SailConnectionWrapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.transaction.*;
 import java.nio.IntBuffer;
+import java.sql.SQLException;
 import java.util.*;
 
 /**
@@ -60,7 +65,7 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
 
     private static Logger log = LoggerFactory.getLogger(KiWiCachingSailConnection.class);
 
-    private Cache<IntArray,List<Statement>> queryCache;
+    private Cache<Long,long[]> queryCache;
 
     // a dummy default context to work around the double meaning of the null value
     private final static URI defaultContext = new URIImpl("http://marmotta.apache.org/contexts/default");
@@ -73,11 +78,14 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
 
     private static long connectionIdCounter = 0;
 
-    public KiWiCachingSailConnection(NotifyingSailConnection wrappedCon, Cache<IntArray, List<Statement>> queryCache, int limit) {
+    private KiWiConnection kiWiConnection;
+
+    public KiWiCachingSailConnection(NotifyingSailConnection wrappedCon, Cache<Long, long[]> queryCache, int limit) {
         super(wrappedCon);
 
         this.queryCache = queryCache;
         this.limit      = limit;
+        this.kiWiConnection = getKiWiConnection(wrappedCon);
 
         this.addConnectionListener(this);
 
@@ -276,9 +284,20 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
 
         IntArray key = createCacheKey(subject,property,object,context,inferred);
         try {
-            if(queryCache.get(key) != null) return queryCache.get(key);
-            else
+            long[] ids = queryCache.get(key.longHashCode());
+            if(ids == null) {
                 return null;
+            } else {
+                ArrayList<Statement> statements = new ArrayList<>(ids.length);
+                for(long id : ids) {
+                    try {
+                        statements.add(kiWiConnection.loadTripleById(id));
+                    } catch (SQLException e) {
+                        log.warn("could not load triple from database: {}",id);
+                    }
+                }
+                return statements;
+            }
         } finally {
             if(implicitTx) {
                 closeTransaction();
@@ -297,7 +316,7 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
      * @param inferred if true, inferred triples are included in the result; if false not
      * @param result   the result of the triple query to cache
      */
-    private void cacheTriples(Resource subject, URI property, Value object, Resource context, boolean inferred, List<Statement> result) {
+    private void cacheTriples(final Resource subject, final URI property, final Value object, final Resource context, boolean inferred, List<Statement> result) {
         boolean implicitTx = tx == null;
 
         resumeTransaction();
@@ -305,7 +324,14 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
         try {
             // cache the query result
             IntArray key = createCacheKey(subject,property,object,context,inferred);
-            queryCache.put(key, result);
+            long[] data = new long[result.size()];
+            for(int i=0; i<result.size(); i++) {
+                Statement stmt = result.get(i);
+                if(stmt instanceof KiWiTriple) {
+                    data[i] = ((KiWiTriple) stmt).getId();
+                }
+            }
+            queryCache.put(key.longHashCode(), data);
 
             // cache the nodes of the triples and the triples themselves
             Set<Value> nodes = new HashSet<Value>();
@@ -313,25 +339,31 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
                 if(stmt instanceof KiWiTriple) {
                     KiWiTriple triple = (KiWiTriple)stmt;
                     Collections.addAll(nodes, new Value[]{triple.getSubject(), triple.getObject(), triple.getPredicate(), triple.getContext()});
-                    queryCache.put(createCacheKey(triple.getSubject(), triple.getPredicate(), triple.getObject(), triple.getContext(), triple.isInferred()), ImmutableList.of(stmt));
+                    queryCache.put(createCacheKey(triple.getSubject(), triple.getPredicate(), triple.getObject(), triple.getContext(), triple.isInferred()).longHashCode(), new long[] {triple.getId()});
                 }
             }
 
             // special optimisation: when only the subject (and optionally context) is given, we also fill the caches for
             // all property values
             if(subject != null && property == null && object == null) {
-                HashMap<URI,List<Statement>> properties = new HashMap<>();
+                HashMap<URI,ArrayList<Long>> properties = new HashMap<>();
                 for(Statement triple : result) {
-                    List<Statement> values = properties.get(triple.getPredicate());
+                    ArrayList<Long> values = properties.get(triple.getPredicate());
                     if(values == null) {
-                        values = new LinkedList<>();
+                        values = new ArrayList<>();
                         properties.put(triple.getPredicate(),values);
                     }
-                    values.add(triple);
+                    if(triple instanceof KiWiTriple) {
+                        values.add(((KiWiTriple) triple).getId());
+                    }
                 }
-                for(Map.Entry<URI,List<Statement>> entry : properties.entrySet()) {
+                for(Map.Entry<URI,ArrayList<Long>> entry : properties.entrySet()) {
                     IntArray key2 = createCacheKey(subject,entry.getKey(),null,context,inferred);
-                    queryCache.put(key2, entry.getValue());
+                    long[] dvalues = new long[entry.getValue().size()];
+                    for(int i=0; i<entry.getValue().size(); i++) {
+                        dvalues[i] = entry.getValue().get(i);
+                    }
+                    queryCache.put(key2.longHashCode(), dvalues);
                 }
             }
 
@@ -360,51 +392,51 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
      *
      */
     private void tripleUpdated(Resource subject, URI predicate, Value object, Iterable<Resource> contexts) {
-        queryCache.remove(createCacheKey(null,null,null,null,false));
-        queryCache.remove(createCacheKey(null,null,null,null,true));
+        queryCache.remove(createCacheKey(null, null, null, null, false).longHashCode());
+        queryCache.remove(createCacheKey(null,null,null,null,true).longHashCode());
 
-        queryCache.remove(createCacheKey(null,null,null,defaultContext,false));
-        queryCache.remove(createCacheKey(null,null,null,defaultContext,true));
+        queryCache.remove(createCacheKey(null,null,null,defaultContext,false).longHashCode());
+        queryCache.remove(createCacheKey(null,null,null,defaultContext,true).longHashCode());
 
 
         // remove all possible combinations of this triple as they may appear in the cache
-        queryCache.remove(createCacheKey(subject,null,null,null,false));
-        queryCache.remove(createCacheKey(subject,null,null,null,true));
-        queryCache.remove(createCacheKey(null,predicate,null,null,false));
-        queryCache.remove(createCacheKey(null,predicate,null,null,true));
-        queryCache.remove(createCacheKey(null,null,object,null,false));
-        queryCache.remove(createCacheKey(null,null,object,null,true));
+        queryCache.remove(createCacheKey(subject,null,null,null,false).longHashCode());
+        queryCache.remove(createCacheKey(subject,null,null,null,true).longHashCode());
+        queryCache.remove(createCacheKey(null,predicate,null,null,false).longHashCode());
+        queryCache.remove(createCacheKey(null,predicate,null,null,true).longHashCode());
+        queryCache.remove(createCacheKey(null,null,object,null,false).longHashCode());
+        queryCache.remove(createCacheKey(null,null,object,null,true).longHashCode());
 
-        queryCache.remove(createCacheKey(subject,predicate,null,null,false));
-        queryCache.remove(createCacheKey(subject,predicate,null,null,true));
-        queryCache.remove(createCacheKey(subject,null,object,null,false));
-        queryCache.remove(createCacheKey(subject,null,object,null,true));
-        queryCache.remove(createCacheKey(null,predicate,object,null,false));
-        queryCache.remove(createCacheKey(null,predicate,object,null,true));
+        queryCache.remove(createCacheKey(subject,predicate,null,null,false).longHashCode());
+        queryCache.remove(createCacheKey(subject,predicate,null,null,true).longHashCode());
+        queryCache.remove(createCacheKey(subject,null,object,null,false).longHashCode());
+        queryCache.remove(createCacheKey(subject,null,object,null,true).longHashCode());
+        queryCache.remove(createCacheKey(null,predicate,object,null,false).longHashCode());
+        queryCache.remove(createCacheKey(null,predicate,object,null,true).longHashCode());
 
 
-        queryCache.remove(createCacheKey(subject,predicate,object,null,false));
-        queryCache.remove(createCacheKey(subject,predicate,object,null,true));
+        queryCache.remove(createCacheKey(subject,predicate,object,null,false).longHashCode());
+        queryCache.remove(createCacheKey(subject,predicate,object,null,true).longHashCode());
 
         for(Resource context : contexts) {
-            queryCache.remove(createCacheKey(null,null,null,context,false));
-            queryCache.remove(createCacheKey(null,null,null,context,true));
-            queryCache.remove(createCacheKey(subject,null,null,context,false));
-            queryCache.remove(createCacheKey(subject,null,null,context,true));
-            queryCache.remove(createCacheKey(null,predicate,null,context,false));
-            queryCache.remove(createCacheKey(null,predicate,null,context,true));
-            queryCache.remove(createCacheKey(null,null,object,context,false));
-            queryCache.remove(createCacheKey(null,null,object,context,true));
-
-            queryCache.remove(createCacheKey(subject,predicate,null,context,false));
-            queryCache.remove(createCacheKey(subject,predicate,null,context,true));
-            queryCache.remove(createCacheKey(subject,null,object,context,false));
-            queryCache.remove(createCacheKey(subject,null,object,context,true));
-            queryCache.remove(createCacheKey(null,predicate,object,context,false));
-            queryCache.remove(createCacheKey(null,predicate,object,context,true));
-
-            queryCache.remove(createCacheKey(subject,predicate,object,context,false));
-            queryCache.remove(createCacheKey(subject,predicate,object,context,true));
+            queryCache.remove(createCacheKey(null,null,null,context,false).longHashCode());
+            queryCache.remove(createCacheKey(null,null,null,context,true).longHashCode());
+            queryCache.remove(createCacheKey(subject,null,null,context,false).longHashCode());
+            queryCache.remove(createCacheKey(subject,null,null,context,true).longHashCode());
+            queryCache.remove(createCacheKey(null,predicate,null,context,false).longHashCode());
+            queryCache.remove(createCacheKey(null,predicate,null,context,true).longHashCode());
+            queryCache.remove(createCacheKey(null,null,object,context,false).longHashCode());
+            queryCache.remove(createCacheKey(null,null,object,context,true).longHashCode());
+
+            queryCache.remove(createCacheKey(subject,predicate,null,context,false).longHashCode());
+            queryCache.remove(createCacheKey(subject,predicate,null,context,true).longHashCode());
+            queryCache.remove(createCacheKey(subject,null,object,context,false).longHashCode());
+            queryCache.remove(createCacheKey(subject,null,object,context,true).longHashCode());
+            queryCache.remove(createCacheKey(null,predicate,object,context,false).longHashCode());
+            queryCache.remove(createCacheKey(null,predicate,object,context,true).longHashCode());
+
+            queryCache.remove(createCacheKey(subject,predicate,object,context,false).longHashCode());
+            queryCache.remove(createCacheKey(subject,predicate,object,context,true).longHashCode());
         }
     }
 
@@ -431,4 +463,41 @@ public class KiWiCachingSailConnection extends NotifyingSailConnectionWrapper im
     }
 
 
+    /**
+     * Get the root sail in the wrapped sail stack
+     * @param sail
+     * @return
+     */
+    private KiWiConnection getKiWiConnection(SailConnection sail) {
+        if(sail instanceof KiWiSailConnection) {
+            return ((KiWiSailConnection) sail).getDatabaseConnection();
+        } else if(sail instanceof SailConnectionWrapper) {
+            return getKiWiConnection(((SailConnectionWrapper) sail).getWrappedConnection());
+        } else {
+            throw new IllegalArgumentException("root sail connection is not a KiWiSailConnection or could not be found");
+        }
+    }
+
+    private class IDTripleLoader implements Function<Long,Statement> {
+        @Override
+        public Statement apply(Long input) {
+            try {
+                return kiWiConnection.loadTripleById(input);
+            } catch (SQLException e) {
+                log.error("could not load triple with ID {}", input);
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private class IDTripleExtractor implements Function<Statement,Long> {
+        @Override
+        public Long apply(Statement input) {
+            if(input instanceof KiWiTriple) {
+                return ((KiWiTriple) input).getId();
+            } else {
+                return -1L;
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/9a7dbd29/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
index f089ce1..0b250de 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
+++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
@@ -24,6 +24,7 @@ import org.infinispan.configuration.cache.Configuration;
 import org.infinispan.configuration.cache.ConfigurationBuilder;
 import org.infinispan.configuration.global.GlobalConfiguration;
 import org.infinispan.configuration.global.GlobalConfigurationBuilder;
+import org.infinispan.context.Flag;
 import org.infinispan.distribution.ch.SyncConsistentHashFactory;
 import org.infinispan.eviction.EvictionStrategy;
 import org.infinispan.lifecycle.ComponentStatus;
@@ -171,7 +172,7 @@ public class KiWiCacheManager {
             cacheManager.defineConfiguration(NODE_CACHE, nodeConfiguration);
         }
 
-        return cacheManager.getCache(NODE_CACHE);
+        return cacheManager.getCache(NODE_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
     /**
@@ -191,7 +192,7 @@ public class KiWiCacheManager {
                     .build();
             cacheManager.defineConfiguration(TRIPLE_CACHE, tripleConfiguration);
         }
-        return cacheManager.getCache(TRIPLE_CACHE);
+        return cacheManager.getCache(TRIPLE_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
 
@@ -209,7 +210,7 @@ public class KiWiCacheManager {
                     .build();
             cacheManager.defineConfiguration(URI_CACHE, uriConfiguration);
         }
-        return cacheManager.getCache(URI_CACHE);
+        return cacheManager.getCache(URI_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
 
@@ -227,7 +228,7 @@ public class KiWiCacheManager {
                     .build();
             cacheManager.defineConfiguration(BNODE_CACHE, bnodeConfiguration);
         }
-        return cacheManager.getCache(BNODE_CACHE);
+        return cacheManager.getCache(BNODE_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
     /**
@@ -245,7 +246,7 @@ public class KiWiCacheManager {
                     .build();
             cacheManager.defineConfiguration(LITERAL_CACHE, literalConfiguration);
         }
-        return cacheManager.getCache(LITERAL_CACHE);
+        return cacheManager.getCache(LITERAL_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
 
@@ -263,7 +264,7 @@ public class KiWiCacheManager {
                     .build();
             cacheManager.defineConfiguration(NAMESPACE_URI_CACHE, nsuriConfiguration);
         }
-        return cacheManager.getCache(NAMESPACE_URI_CACHE);
+        return cacheManager.getCache(NAMESPACE_URI_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
     /**
@@ -280,7 +281,7 @@ public class KiWiCacheManager {
                     .build();
             cacheManager.defineConfiguration(NAMESPACE_PREFIX_CACHE, nsprefixConfiguration);
         }
-        return cacheManager.getCache(NAMESPACE_PREFIX_CACHE);
+        return cacheManager.getCache(NAMESPACE_PREFIX_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
 
@@ -299,7 +300,7 @@ public class KiWiCacheManager {
                     .build();
             cacheManager.defineConfiguration(LOADER_CACHE, loaderConfiguration);
         }
-        return cacheManager.getCache(LOADER_CACHE);
+        return cacheManager.getCache(LOADER_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
 
@@ -330,7 +331,7 @@ public class KiWiCacheManager {
                 cacheManager.defineConfiguration(REGISTRY_CACHE, registryConfiguration);
             }
         }
-        return cacheManager.getCache(REGISTRY_CACHE);
+        return cacheManager.getCache(REGISTRY_CACHE).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
     }
 
     /**
@@ -344,7 +345,7 @@ public class KiWiCacheManager {
         if(!cacheManager.cacheExists(name)) {
             cacheManager.defineConfiguration(name, new ConfigurationBuilder().read(defaultConfiguration).build());
         }
-        return cacheManager.getCache(name);
+        return cacheManager.getCache(name).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP).getAdvancedCache().withFlags(Flag.SKIP_LOCKING, Flag.SKIP_CACHE_LOAD, Flag.SKIP_REMOTE_LOOKUP);
 
     }
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/9a7dbd29/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiUriResource.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiUriResource.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiUriResource.java
index 5ced319..74bdfd3 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiUriResource.java
+++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiUriResource.java
@@ -31,12 +31,6 @@ public class KiWiUriResource extends KiWiResource implements URI {
 
 	private static final long serialVersionUID = -6399293877969640084L;
 
-    /**
-     * The MemURI's hash code, 0 if not yet initialized.
-     */
-    private int hashCode = 0;
-
-
     private String uri;
 
 
@@ -139,11 +133,7 @@ public class KiWiUriResource extends KiWiResource implements URI {
 
     @Override
     public int hashCode() {
-        if (hashCode == 0) {
-            hashCode = toString().hashCode();
-        }
-
-        return hashCode;
+        return toString().hashCode();
     }
 
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/9a7dbd29/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
index 6d932fb..2022c46 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
+++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
@@ -1770,20 +1770,20 @@ public class KiWiConnection {
 
     private void cacheNode(KiWiNode node) {
         if(node.getId() >= 0) {
-            nodeCache.putAsync(node.getId(), node);
+            nodeCache.putForExternalRead(node.getId(), node);
         }
         if(node instanceof KiWiUriResource) {
-            uriCache.putAsync(node.stringValue(), (KiWiUriResource) node);
+            uriCache.putForExternalRead(node.stringValue(), (KiWiUriResource) node);
         } else if(node instanceof KiWiAnonResource) {
-            bnodeCache.putAsync(node.stringValue(), (KiWiAnonResource) node);
+            bnodeCache.putForExternalRead(node.stringValue(), (KiWiAnonResource) node);
         } else if(node instanceof KiWiLiteral) {
-            literalCache.putAsync(LiteralCommons.createCacheKey((Literal) node), (KiWiLiteral) node);
+            literalCache.putForExternalRead(LiteralCommons.createCacheKey((Literal) node), (KiWiLiteral) node);
         }
     }
 
     private void cacheTriple(KiWiTriple triple) {
         if(triple.getId() >= 0) {
-            tripleCache.putAsync(triple.getId(),triple);
+            tripleCache.putForExternalRead(triple.getId(),triple);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/9a7dbd29/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
----------------------------------------------------------------------
diff --git a/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java b/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
index 4b19fee..72b3f05 100644
--- a/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
+++ b/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
@@ -18,8 +18,6 @@
 package org.apache.marmotta.platform.backend.kiwi;
 
 import com.google.common.collect.ImmutableList;
-import org.apache.marmotta.kiwi.caching.config.KiWiQueryCacheConfiguration;
-import org.apache.marmotta.kiwi.caching.sail.KiWiCachingSail;
 import org.apache.marmotta.kiwi.config.KiWiConfiguration;
 import org.apache.marmotta.kiwi.exception.DriverNotFoundException;
 import org.apache.marmotta.kiwi.persistence.KiWiDialect;
@@ -138,6 +136,7 @@ public class KiWiStoreProvider implements StoreProvider {
 
         NotifyingSail base = new KiWiStore(configuration, cacheManager);
 
+        /*
         if(configurationService.getBooleanConfiguration(CACHING_QUERY_ENABLED,true)) {
             log.info(" - enabling query caching support");
             KiWiQueryCacheConfiguration qcfg = new KiWiQueryCacheConfiguration();
@@ -145,6 +144,7 @@ public class KiWiStoreProvider implements StoreProvider {
             qcfg.setMaxEntrySize(configurationService.getIntConfiguration(CACHING_QUERY_LIMIT, 150));
             base = new KiWiCachingSail(base, qcfg);
         }
+        */
 
 
         if("native".equalsIgnoreCase(configurationService.getStringConfiguration(SPARQL_STRATEGY))) {