You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@clerezza.apache.org by "Reto Bachmann-Gmür (JIRA)" <ji...@apache.org> on 2011/05/18 01:05:48 UTC
[jira] [Closed] (CLEREZZA-414) the performance of removing
resources with externalized literals should be improved
[ https://issues.apache.org/jira/browse/CLEREZZA-414?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Reto Bachmann-Gmür closed CLEREZZA-414.
---------------------------------------
should have closed them earlier.
> the performance of removing resources with externalized literals should be improved
> -----------------------------------------------------------------------------------
>
> Key: CLEREZZA-414
> URL: https://issues.apache.org/jira/browse/CLEREZZA-414
> Project: Clerezza
> Issue Type: Improvement
> Reporter: Hasan
> Assignee: Reto Bachmann-Gmür
>
> I compared the performance of AbstractDiscobitsHandler.remove() when removing an InfoDiscoBit in the following cases:
> a. with literal externalizer
> a1. the infoBit is about 3.5 MB
> a2. the infoBit is about 30 KB
> b. without literal externalizer
> b1. the infoBit is about 3.5 MB
> b2. the infoBit is about 30 KB
> Using a clerezza instance on my notebook, I obtained an average value for
> a1: 15 seconds
> a2: 110 ms
> b1: 500 ms
> b2: 5 ms
> I examined the remove method and did some timestamping. The comments in the code below tell us where most of the times are spent.
> public void remove(NonLiteral node) {
> MGraph mGraph = getMGraph();
> Iterator<Triple> properties = mGraph.filter(node, null, null);
> //copying properties to set, as we're modifying underlying graph
> Set<Triple> propertiesSet = new HashSet<Triple>();
> // this while loop consumes half of the total time needed for the whole remove operation in case of using literal externalizer
> // if literal is NOT externalized, the time consumed by this while loop is negligible
> while (properties.hasNext()) {
> propertiesSet.add(properties.next());
> }
> properties = propertiesSet.iterator();
> while (properties.hasNext()) {
> Triple triple = properties.next();
> UriRef predicate = triple.getPredicate();
> if (predicate.equals(DISCOBITS.contains)) {
> try {
> GraphNode containedNode = new GraphNode((NonLiteral)triple.getObject(), mGraph);
> //The following includes triple
> containedNode.deleteNodeContext();
> } catch (ClassCastException e) {
> throw new RuntimeException("The value of "+predicate+" is expected not to be a literal");
> }
> //as some other properties of node could have been in the context of the object
> remove(node);
> return;
> }
> }
> // In case of using literal externalizer, the code segment below consumes half of the total time needed for the whole remove operation
> // if literal is NOT externalized, it consumes most of the time needed for the whole remove operation
> GraphNode graphNode = new GraphNode(node, mGraph);
> graphNode.deleteNodeContext();
> }
> It seems that using literal externalizer is pretty expensive.
> We need to find a more efficient solution to deal with large literals
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira