public class ArbitraryLengthPathTask extends Object implements Callable<Void>
JVMDistinctBindingSetsOp
over these variable(s) prior to
calling the operator. In particular, this operator does *not* join with
incoming bindings, but discards all variables that are not bound by the
associated ALP node.
The basic idea behind this operator is to run a series of rounds until the solutions produced by each round reach a fixed point. Regardless of the the actual schematics of the arbitrary length path (whether there are constants or variables on the left and right side), we use two transitivity variables to keep the operator moving. Depending on the schematics of the arbitrary length path, we can run on forward (left side is input) or reverse (right side is input). For each intermediate solution, the binding for the transitivity variable on the output side is re-mapped to input for the next round.
This operator does not use internal parallelism, but it is thread-safe and multiple instances of this operator may be run in parallel by the query engine for parallel evaluation of different binding set chunks flowing through the pipeline. However, there are much more efficient query plan patterns for most use cases. E.g., (a) creating a hash index with all source solutions, (b) flooding a sub-section of the query plan with the source solutions from the hash index; and (c) hash joining the solutions from the sub-section of the query plan back against the hash index to reunite the solutions from the subquery with those in the parent context.
Constructor and Description |
---|
ArbitraryLengthPathTask(ArbitraryLengthPathOp controllerOp,
BOpContext<IBindingSet> context) |
public ArbitraryLengthPathTask(ArbitraryLengthPathOp controllerOp, BOpContext<IBindingSet> context)
Copyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.