You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2014/11/10 11:53:18 UTC
[13/50] [abbrv] jena git commit: JENA-800 : Reorder function
corresponding to that in 2.11.2.
JENA-800 : Reorder function corresponding to that in 2.11.2.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/a9c7671c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/a9c7671c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/a9c7671c
Branch: refs/heads/eliminate-assignments
Commit: a9c7671cdd2b6d7c8c9c2031aac41b325cac91e1
Parents: ef40d6b
Author: Andy Seaborne <an...@apache.org>
Authored: Wed Nov 5 11:26:46 2014 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed Nov 5 11:26:46 2014 +0000
----------------------------------------------------------------------
.../optimizer/reorder/ReorderFixedAlt.java | 80 ++++++++++++++++++++
1 file changed, 80 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/a9c7671c/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/reorder/ReorderFixedAlt.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/reorder/ReorderFixedAlt.java b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/reorder/ReorderFixedAlt.java
new file mode 100644
index 0000000..e5014c9
--- /dev/null
+++ b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/reorder/ReorderFixedAlt.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.sparql.engine.optimizer.reorder;
+
+import static com.hp.hpl.jena.sparql.engine.optimizer.reorder.PatternElements.TERM ;
+import static com.hp.hpl.jena.sparql.engine.optimizer.reorder.PatternElements.VAR ;
+
+import com.hp.hpl.jena.sparql.engine.optimizer.Pattern ;
+import com.hp.hpl.jena.sparql.engine.optimizer.StatsMatcher ;
+import com.hp.hpl.jena.sparql.graph.NodeConst ;
+import com.hp.hpl.jena.sparql.sse.Item ;
+
+/**
+ * Alternative fixed reorder function. This corresponds to the algorithm prior
+ * to Jena 2.11.2. It is susceptable to picking bad orders when there are lots
+ * of non-characterstic (non-selective) rdf:type triples.
+ * <p>
+ * The default "ReorderFixed" is better in most cases because it avoids
+ * "? rdf:type T" which can be very unselective. Being data independent, that is
+ * a guess. Consider using the stats matcher for detailed control.
+ */
+public class ReorderFixedAlt extends ReorderTransformationSubstitution
+{
+ public ReorderFixedAlt() {}
+
+ // Fixed scheme for when we have no stats.
+ // It chooses a triple pattern by order of preference.
+
+ private static Item type = Item.createNode(NodeConst.nodeRDFType) ;
+
+ /** The number of triples used for the base scale */
+ public static int MultiTermSampleSize = 100 ;
+
+ /** Maximum value for a match involving two terms. */
+ public static int MultiTermMax = 9 ;
+
+ public final static StatsMatcher matcher ;
+ static {
+ matcher = new StatsMatcher() ;
+
+ //matcher.addPattern(new Pattern(1, TERM, TERM, TERM)) ; // SPO - built-in - not needed a s a rule
+
+ // Numbers choosen as an approximation ratios for a graph of 100 triples
+ matcher.addPattern(new Pattern(2, TERM, TERM, VAR)) ; // SP?
+
+ // Pointless - this rule is over ridden by lower weight ?PO
+ // matcher.addPattern(new Pattern(5, TERM, type, TERM)) ; // ? type O -- worse than ?PO
+
+ matcher.addPattern(new Pattern(3, VAR, TERM, TERM)) ; // ?PO
+ matcher.addPattern(new Pattern(2, TERM, VAR, TERM)) ; // S?O
+
+ matcher.addPattern(new Pattern(10, TERM, VAR, VAR)) ; // S??
+ matcher.addPattern(new Pattern(20, VAR, VAR, TERM)) ; // ??O
+ matcher.addPattern(new Pattern(30, VAR, TERM, VAR)) ; // ?P?
+
+ matcher.addPattern(new Pattern(MultiTermSampleSize, VAR, VAR, VAR)) ; // ???
+ }
+
+ @Override
+ public double weight(PatternTriple pt)
+ {
+ return matcher.match(pt) ;
+ }
+}