Each of the Anaplan calculation engines is designed for models with different densities of data. Polaris is designed as a natively sparse calculation engine, so is well-suited to sparse data sets.
Dense models are models where most cells are populated. Sparse models are models where most cells are NOT populated.
A populated cell within Polaris is a cell with a non-default value. The default values for the different data types are:
- Number: 0
- Boolean: FALSE
- Date: Blank
- Time Period: Blank
- List Item: Blank
- Text: ““ (an empty string)
An example of sparsity and density
Data in Anaplan models is stored in modules in hierarchical lists and line items. Lists and line items are used as dimensions in a module. See the example below:
APAC | AMER | EMEA | |
Product cost | 125.00 | 0 | 87.45 |
Sale price | 135.00 | 0 | 92.50 |
Quantity sold | 1,156 | 0 | 897 |
In the Classic engine, this data is stored as an array and is dense. This means that every cell requires memory, regardless of whether it's empty or not. Each cell in the Classic engine uses 8 bytes of memory, whether it contains data or not. So the example above would use approximately 72 bytes of memory, as it contains 9 cells.
The example below is more suited to Polaris as it has more empty cells:
APAC | AMER | EMEA | |
Product cost | 0 | 0 | 87.45 |
Sale price | 0 | 0 | 92.50 |
Quantity sold | 0 | 0 | 0 |
In Polaris, map-based storage with keys is used instead of an array. This means that only cells that contain data consume memory. Empty cells do not consume memory. However, each cell that contains data in Polaris uses 24 bytes of memory for numeric cells. So the example above would use approximately 48 bytes of memory, as it contains two cells with data.
Workspace memory efficiency of the different calculation engines
You determine the calculation engine at the workspace level, so consider the general composition of all data within a workspace when understanding the memory efficiency.
Each cell in a grid in the Classic engine uses 8 bytes of memory, whether it contains data or is empty. Only cells that contain data in Polaris use memory – 24 bytes each for numeric cells.
Which engine is more memory efficient depends on overall density:
- When more than 33% of cells contain data, the Classic engine is more memory efficient
- When fewer than 33% of cells contain data, Polaris is more memory efficient
You can check the effect of formulas upon sparsity when you configure line items. This information is in the Populated Cell Count, Memory Used, and Calc Complexity columns. Learn more about the potential effects of formulas upon sparsity.