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:
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:
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