public class MemorySortOp extends SortOp
Computing the value expressions first is not only an efficiency, but is also
required in order to detect type errors. When a type error is detected for a
value expression the corresponding input solution is kept but with no new
bindings, see trac-765. Since the
computed value expressions must become bound on the solutions to be sorted,
the caller is responsible for wrapping any value expression more complex than
a variable or a constant with an IBind
onto an anonymous variable.
All such variables will be dropped when the solutions are written out. Since
this operator must be able to compare all IV
s in all
IBindingSet
s, it depends on the materialization of non-inline
IV
s and the ability of the value comparator to handle comparisons
between materialized non-inline IV
s and inline IV
s.
TODO External memory ORDER BY operator.
SPARQL ORDER BY semantics are complex and evaluating a SPARQL ORDER BY is further complicated by the schema flexibility of the value to be sorted. The simplest path to a true external memory sort operator would be to buffer and manage paging for blocks of inline IVs without materialized RDF values s and non-inline IVs with materialized RDF values.
An operator could also be written which buffers the solutions on the native heap but the as-bound values which will be used to order those solutions are either buffered on the JVM heap or materialized onto the JVM heap when the sort is executed. This could scale better than a pure JVM heap version, but only to the extent that the keys are smaller than the total solutions. The solutions would probably be written as serialized binding sets on the memory manager such that each solution has its own int32 address. That address can then be paired with the as-bound key to be sorted on the JVM heap.
SortOp.Annotations
DEFAULT_INITIAL_CAPACITY
Constructor and Description |
---|
MemorySortOp(BOp[] args,
Map<String,Object> annotations)
Required shallow copy constructor.
|
MemorySortOp(MemorySortOp op)
Constructor required for
com.bigdata.bop.BOpUtility#deepCopy(FilterNode) . |
Modifier and Type | Method and Description |
---|---|
FutureTask<Void> |
eval(BOpContext<IBindingSet> context)
Return a
FutureTask which computes the operator against the
evaluation context. |
getSortOrder, getValueComparator
assertAtOnceJavaHeapOp, assertMaxParallelOne, getChunkCapacity, getChunkOfChunksCapacity, getChunkTimeout, getMaxMemory, getMaxParallel, isAtOnceEvaluation, isBlockedEvaluation, isLastPassRequested, isPipelinedEvaluation, isReorderSolutions, isSharedState, newStats
__replaceArg, _clearProperty, _set, _setProperty, annotations, annotationsCopy, annotationsEqual, annotationsRef, argIterator, args, argsCopy, arity, clearAnnotations, clearProperty, deepCopy, deepCopy, get, getProperty, setArg, setProperty, setUnboundProperty, toArray, toArray
annotationsEqual, annotationsToString, annotationsToString, annotationValueToString, checkArgs, clone, equals, getEvaluationContext, getId, getProperty, getRequiredProperty, hashCode, indent, isController, mutation, shortenName, toShortString, toString, toString
public MemorySortOp(MemorySortOp op)
com.bigdata.bop.BOpUtility#deepCopy(FilterNode)
.public FutureTask<Void> eval(BOpContext<IBindingSet> context)
PipelineOp
FutureTask
which computes the operator against the
evaluation context. The caller is responsible for executing the
FutureTask
(this gives them the ability to hook the completion of
the computation).eval
in class PipelineOp
context
- The evaluation context.FutureTask
which will compute the operator's
evaluation.Copyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.