This guide shows how to use partitioning and sharding in ClickHouse with Spring Boot for scalable and efficient data management.
1. Create Partitioned Table
In ClickHouse, partitioning splits data by key:
CREATE TABLE orders (
id UInt64,
user_id UInt32,
amount Float32,
created Date
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(created)
ORDER BY (id);
This keeps data grouped by month.
2. Insert Data from Spring Boot
Use
JdbcTemplate or Spring Data JDBC:
jdbcTemplate.update(
"INSERT INTO orders (id, user_id, amount, created) VALUES (?, ?, ?, ?)",
id, userId, amount, LocalDate.now()
);
3. Sharding Across Nodes
Sharding distributes data across cluster nodes. Example distributed table:
CREATE TABLE orders_dist AS orders
ENGINE = Distributed('cluster1', 'default', 'orders', rand());
4. Query with Spring Boot
Run queries as usual, ClickHouse will handle partitions and shards:
List<Map<String, Object>> results =
jdbcTemplate.queryForList("SELECT sum(amount) FROM orders_dist WHERE created >= '2025-01-01'");
5. Benefits
- Faster queries with partition pruning
- Data spread across nodes for scalability
- Easy integration with Spring Boot batch inserts
image quote pre code