- Rather than conflating the different aspects of an aggregation, break out the functionality further so that performance enhancements can be made on aggregations broken down by functionality. For example, the Aggregation interface may be better characterized as something like this:
public interface Aggregation<P extends Persistable, R extends Mergeable, T>
{
public P getParameters();
public R getResult();
public void aggregate(
T entry );
}
rather than currently the aggregation function, the parameters to that function and the result are all rolled together.
- instead of decomposing ranges using the space filling curve decomposition on the client (batch scanner) decompose ranges within the iterator and appropriately seek. This will limit the amount of iterator instances and optimize the amount of the aggregation that can be rolled together. We may still want to break down ranges by tablet boundaries on the client side.
rather than currently the aggregation function, the parameters to that function and the result are all rolled together.