You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lens.apache.org by Rajat Khandelwal <ra...@gmail.com> on 2017/07/10 10:32:41 UTC
Review Request 60739: LENS-1452: Optimize Time Union candidate
Algorithm
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/60739/
-----------------------------------------------------------
Review request for lens.
Bugs: LENS-1452
https://issues.apache.org/jira/browse/LENS-1452
Repository: lens
Description
-------
Current algorithm:
* Create bitmap (equivalent to powerset)
* from the powerset, add sets which can complete all time ranges as candidates
* Prune sets which are contained in other sets
Proposed change:
The following recursion implemented iteratively:
{code}
(ignoring cubeql for clarity)
getCombinations(candidates) = getCombinationsRecursive(emptyList(), candidates)
getCombinationsRecursive(incompleteCombinations: List<List<Candidate>>, candidates: List<Candidate>) =
head, tail = head and tail of linked List candidates
add head to all elements of incompleteCombinations.
add {{ [head] }} as one incompleteCombination.
complete = remove now complete combinations from incompleteCombinations
return {{complete ++ getCombinationsTailRecursive(incompleteCombinations+[head], tail)}}
{code}
The improvement is, that redundant union candidates like {a,b,c} won't be generated if {a,b} is already covering time ranges. This will only generate minimal sets that cover time ranges. So the memory footprint isn't O( 2^n ) anymore.
Diffs
-----
lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java 8e071621ec15f90094d346e2b6e109b82ea68348
Diff: https://reviews.apache.org/r/60739/diff/1/
Testing
-------
Thanks,
Rajat Khandelwal