# Columnar Storage

> Stores data by column rather than row for efficient analytical queries.

- **Category**: Data Science
- **Subcategory**: Storage
- **Canonical URL**: https://designpattern.fyi/patterns/columnar-storage/

---

## Description
**Context**: Analytical queries typically access few columns across many rows. Columnar storage enables reading only needed columns, reducing I/O significantly.


## Use Cases
Data warehouses, analytics platforms, and OLAP workloads where queries aggregate across many rows but access few columns.



## Implementation Example

```python
# Columnar Storage Concept # Row-based storage row_storage = [ {"id": 1, "name": "Alice", "age": 30, "salary": 50000}, {"id": 2, "name": "Bob", "age": 25, "salary": 45000}, ]
# Columnar storage equivalent columnar_storage = { "id": [1, 2], "name": ["Alice", "Bob"], "age": [30, 25], "salary": [50000, 45000] }
# Query only salary column avg_salary = sum(columnar_storage["salary"]) / len(columnar_storage["salary"])
```



## Trade-offs


### Advantages

- - Efficient for analytics

- - Better compression

- - Reduced I/O

- - Faster aggregations




### Considerations & Drawbacks

- - Slower for single-row lookups

- - Write complexity

- - Not ideal for transactional workloads

- - Schema evolution challenges







---
**Reference**: [Original Source](https://parquet.apache.org/)

