240 likes | 257 Views
Learn about the efficient array-based algorithm for computing multidimensional aggregates in OLAP systems. Explore the storage challenges, performance metrics, and conclusions of the presented paper.
E N D
An Array-Based Algorithm for Simultaneous Multidimensional Aggregates By Yihong Zhao, Prasad M. Desphande and Jeffrey F. Naughton Presented by Kia Hall for CIS 661 (taught by Professor Megalooikonomou)
Outline of Presentation • Purpose of Paper • ROLAP vs. MOLAP systems • Array Storage • Basic Array-Based Algorithm • Multi-Way Array Algorithm • Single Pass • Multi-Pass • Performance • Conclusions
Purpose • Computing multiple related group-bys and aggregates is one of the core operations of On-Line Analytical Processing (OLAP) applications. • The “Cube” operator computes group-by aggregates over all possible subsets of the specified dimensions. • The purpose of this paper is to present an efficient algorithm to compute the Cube for Multidimensional OLAP (MOLAP) systems. • Although is designed for MOLAP systems it can also be used for Relational OLAP (ROLAP) systems when table data is converted to an array, cubed as if in a MOLAP system, and then converted back to a table.
“Cube” example • Consider an example with dimensions product, store and date, and “measure” (data value) sales. • To compute the “Cube” would be to compute sales grouped by all subsets of these dimensions, which include the following: • By product, store and date • By product and store, By product and date, By store and date • By product, By sales, By date • Overall Sales
ROLAP vs. MOLAP systems • ROLAP systems by definition use relational tables as their data structure • A “cell” is represented in the system as a tuple, with some attributes that identify the location of the tuple in the multidimensional space, and other attributes that contain the data value corresponding to that data cell • MOLAP systems store their data as sparse arrays, the the data’s position within the sparse array encoding the relevant attribute information • Critical to MOLAP efficiency in computing the “Cube” is to simultaneously compute spatially-delimited partial aggregates so that a cell does not have to be revisited for each sub-aggregate.
Array Storage • There are three major issues relating to the storage of the array that must be resolved • It is likely in a multidimensional application that the array is too large to fit in memory • It is likely that many of the cells in the array are empty, because there is no data for that combination of coordinates • In many cases an array will need to be loaded from data that is not in array format (e.g., from a relational table or from an external load file)
Resolving Storage Issues • A large n-dimensional array that can not fit into memory is divided into small size n-dimensional (corresponding to disk blocking size) chunks and each chunk is stored as one object on disk • Sparse chunks (with data density less than 40%) use a “chunk-offset compression” where for each valid array entry a pair, (offsetInChunk, data), is stored • To load data from formats other than arrays, a partition-based loading algorithm is used that takes as input the table, each dimension size and a predefined chunk size, and returns a (possibly compressed) chunked array
Efficient Computation • The basic algorithm (which will be improved upon) computes the cube of a chunked array in multiple passes, computing each “group-by” in a separate pass • For a three-dimensional array (with dimensions ABC) the aggregates to be computed can be viewed as a lattice with ABC at the root, with AB, BC, and AC as children; with AC having children A and C, and so forth. • To compute the cube efficiently a tree is embedded in this lattice and each aggregate is computed from its parent in the tree
Minimum Spanning Tree • From the dimension sizes of the array and the sizes of the chunks used to store the array, the following can be computed • The size of the array corresponding to each node in the lattice • How much storage will be needed to use one of these arrays to compute a child • From the above information a minimum spanning tree can be defined • For each node n in the lattice, its parent in the minimum spanning tree is the node n’ which has the minimum size and from which n can be computed
Basic Array Cubing Algorithm • Construct the minimum size spanning tree for the group-bys of the Cube • Compute any group-by Di1Di2 . . . Dik of a Cube from the “parent” Di1Di2 . . . Dik+1 which has the minimum size • Read in each chunk of Di1Di2 . . . Dik+1 along the dimension Dik+1 and aggregate each chunk to a chunk of Di1Di2 . . . Dik • Once the chunk of Di1Di2 . . . Dik is complete, we output the chunk to disk and use the memory for for the next chuck of Di1Di2 . . . Dik, keeping only one chunk in memory at a time
Efficiency Improvement • To improve on the basic algorithm we want to modify it to compute all the children of a parent in a single pass of the parent • A data Cube for an n-dimensional array consists of 2n group-bys. Ideally, if the memory were large enough hold all group-bys, total overlap could be achieved and the Cube would be finished with one scan of the array • The “Multi-Way Array Cubing Algorithm” attempts to minimize the memory needed for each computation, so that maximum overlap can be achieved • The single pass version of this algorithm assumes ideal memory; the multi-pass modification, realistically supposes that multiple passes may be necessary
Dimension Order and Memory • The logical order used in reading in an array of chunks is the “dimension order”; this order is independent of the actual physical order • Dimension order should be exploited to reduce the memory required by each group-by • Once the dimension order is determined, a general rule can be formulated to determine what chunks of each group-by need to stay in memory to avoid rescanning • By theorem, optimal dimension order for an array A, with dimensions D1D2 . . . Dk is O = D1, D2, . . ., Dk.
Memory Allocation Rule • Memory Allocation Rule 1: For a group-by (Dj1 . . . Djn-1 ) of the array (D1, . . ., Dn) read in the dimension order O = D1, D2, . . ., Dk, if (Dj1 . . . Djn-1 ) contains a prefix of (D1, . . ., Dn) with length p, 0pn-1, we allocate pi=1 | Di| x n-1i=p+1 | Ci| units of array element to (Dj1 . . . Djn-1 ) group-by, where | Di| is the size of dimension i and | Ci| is the chunk size of dimension I • This memory allocation rule is used to build a Minimum Memory Spanning Tree (MMST)
Minimum Memory Spanning Trees • A MMST for a Cube (D1, . . ., Dn) in a dimension order O=(Dj1, . . ., Djn) has n+1 levels with the root (Dj1, . . ., Djn) at level n • Using the first rule, the memory required at each level of a Minimum Memory Spanning Tree (MMST) can be calculated using the following memory rule: • Memory Allocation Rule 2: The total memory requirement for level j of the MMST for a dimension order O=(D1, . . ., Dn) is given by: • n-ji=1 | Di| + C(j, 1)(n-j-1i=1 | Di|)c + C(j+1, 2)(n-j-2i=1 | Di|)c2+ . . . + C(n-1, n-j)cn-j
Single Pass Multi-Way Cubing Algorithm • The single pass algorithm assumes there is sufficient memory required by the MMST • In this case, all group-bys can be computed recursively in a single scan of the input array • By theorem, the required memory is computed as follows: • Theorem: For a chunked multidimensional array A with the size ni=1 |Di| where |Di| =d for all i, and each array chunk has the size ni=1 |Ci| where |Ci| =c for all i, the total amount of memory to compute the Cube of the array in one scan of A is less than cn+(d+1+c)n-1.
Multi-Pass Multi-Way Cubing Algorithm • Let T be the MMST for the optimal dimension ordering O and MT be the memory required for T, calculated using Memory Allocation Rule 2 • If M MT, we cannot allocate the required memory for some of the subtrees of the MMST, called “incomplete trees.” • Extra steps are required to compute the group-bys included in incomplete trees
Multi-Pass Multi-Way Algorithm (cont) • Create the MMST for a dimension order O • Add T to the ToBeComputed List • For each tree T’ in the ToBeComputed List • { Create the working subtree W and incomplete subtrees Is 5. Allocate memory to the subtrees 6. Scan the array chunk of the root of T’ in the order O 7. { Aggregate each chunk to the group-bys in W 8. Generate intermediate results for Is 9. Write complete chunks of W to disk 10. Write intermediate results to the partitions of Is } 11. For each I 12. { Generate the chunks from the partitions of I 13. Write the completed chunks of I 14. Add I to ToBeComputed } }
Testing Conditions • Testing was done using three data sets in which one of the following attributes varied, while the other two remained constant: • Number of valid data entries • Dimension size • Number of dimensions • A popular ROLAP (table) cubing algorithm was compared with the MOLAP (array) Multi-Way Algorithm • The MOLAP Algorithm consistently had better performance time
ROLAP vs. MOLAP Performance • The data table sizes are significantly larger than the compressed arrays (and compressed chunks) of MOLAP • A significant percentage of time (55-60%) is spent sorting intermediate results • Tuple comparisons are expensive because there are multiple fields to be compared • About 10-12% is spent copying data, done while generating result tuples • Since is MOLAP is position-based cells of the array are aggregated based on their position without multiple sorts • The MOLAP Algorithm is relatively CPU intensive (80%) as compared with the ROLAP Algorithm (70%)
Conclusion • Multi-Way Array Algorithm overlaps the computation of different group-bys, while using minimal memory for each group-by. • Performance results show that the Algorithm performs much better than previously published ROLAP algorithms • The performance benefits are so substantial that in the testing done for this paper it was faster to load an array from a table, cube the array, then dump the cubed array into tables than to cube the table directly. • Thus, the Algorithm is valuable in both ROLAP and MOLAP systems