-
Notifications
You must be signed in to change notification settings - Fork 59
Executor Roadmap
jhellerstein edited this page Apr 13, 2011
·
1 revision
Factor into two separate issues: handling positive deltas (within a tick and across ticks), and negative deltas (across ticks only).
We want to get from where we are to a fully push-based delta-handling mechanism. We can take this in stages
In this stage we avoid "pulling" from rules where all deltas are empty.
- Extend depanalysis.rb to map from collection name to stratum/rule pair.
- Upon delta to collection, push those stratum/rule pairs onto a priority queue by stratum #.
- Change stratum eval to only evaluate rules on priority queue, and to push results onto the queue. Make sure tick_deltas works properly.
In this stage we only "pull" along branches of joins that have work to do.
- Simple for base collections -- tick_delta and do_insert(o, @delta)
- For joins, need to fiddle the arguments/mode on each appropriately.
- Group/Argagg should behave as usual
This is the full rewrite. I believe the right way to design this is a push-based eddy-style approach with an extensible scheduler mechanism. It will be easier to get this right once we know how to handle state across deltas -- i.e. once we've done the previous two steps.
- Modify expensive collection methods to keep their within-tick state across ticks. Includes joins (i.e. pairs/matches/lefts/rights/flatten/etc), group/argagg, etc.
- Do naive invalidation of that state (e.g. empty Join cache on a deletion, empty group/argagg cache on any change, etc.)
- Think about extensibility interfaces for subsequent improvements to invalidation -- e.g. consider how to support "differential" join logic to handle deletion in joins.