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 IVs in all
IBindingSets, it depends on the materialization of non-inline
IVs and the ability of the value comparator to handle comparisons
between materialized non-inline IVs and inline IVs.
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.AnnotationsDEFAULT_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, getValueComparatorassertAtOnceJavaHeapOp, 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, toArrayannotationsEqual, annotationsToString, annotationsToString, annotationValueToString, checkArgs, clone, equals, getEvaluationContext, getId, getProperty, getRequiredProperty, hashCode, indent, isController, mutation, shortenName, toShortString, toString, toStringpublic MemorySortOp(MemorySortOp op)
com.bigdata.bop.BOpUtility#deepCopy(FilterNode).public FutureTask<Void> eval(BOpContext<IBindingSet> context)
PipelineOpFutureTask 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 PipelineOpcontext - The evaluation context.FutureTask which will compute the operator's
evaluation.Copyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.