Зміст
- Вступ
- Загальна архітектура
- Чому Sharding в MongoDB?
- Налаштування кластера
- Інтеграція з Spring Boot
- Висновки
Вступ
У сучасному світі Big Data здатність ефективно керувати великими обсягами даних стала критично важливою. У цій статті ми розглянемо, як побудувати надійну архітектуру, поєднуючи потужність Spring Boot з можливостями sharding в MongoDB.
Загальна архітектура
Перш ніж заглиблюватися в деталі реалізації, ось загальний огляд архітектури, яку ми будемо реалізовувати:
Загальна архітектура
Ця архітектура ілюструє різні компоненти нашої системи:
- Шар додатка Spring Boot, який взаємодіє з MongoDB.
- Маршрутизатор MongoDB (mongos), який розподіляє запити.
- Сервери конфігурацій, які керують метаданими.
- Шарди, які зберігають дані в розподіленому вигляді.
Чому Sharding в MongoDB?
Sharding — це стратегія, що дозволяє розподіляти дані між кількома серверами. Цей підхід має кілька переваг:
- Горизонтальна масштабованість
- Краща продуктивність для читання/запису
- Ефективний розподіл навантаження
- Висока доступність
Налаштування кластера
Першим кроком є налаштування нашого кластера MongoDB. Ось як це зробити:
1. Налаштування серверів конфігурації
# Запустити сервери конфігурації
mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019
# Ініціалізувати replica set
mongosh --port 27019
rs.initiate({
_id: "configReplSet",
members: [
{ _id: 0, host: "localhost:27019" }
]
})
2. Налаштування шардів
# Запустити шард
mongod --shardsvr --replSet shard1 --dbpath /data/shard1 --port 27020
mongod --shardsvr --replSet shard2 --dbpath /data/shard2 --port 27021
Інтеграція з Spring Boot
Після налаштування нашого кластера перейдемо до інтеграції з Spring Boot.
1. Налаштування Maven
org.springframework.boot
spring-boot-starter-data-mongodb
org.springframework.boot
spring-boot-starter-web
2. Модель даних
@Document(collection = "products")
@Getter @Setter @NoArgsConstructor
public class Product {
@Id
private String id;
@Indexed
private String name;
private String description;
@Indexed
private double price;
@ShardingKey
private String region;
}
3. Репозиторій Spring Data
@Repository
public interface ProductRepository extends MongoRepository {
List findByRegion(String region);
@Aggregation(pipeline = {
"{ $group: { _id: '$region', avgPrice: { $avg: '$price' } } }"
})
List getAveragePriceByRegion();
}
Для того, щоб отримати максимальну вигоду від цієї архітектури, ось кілька основних найкращих практик:
- Вибір ключа Sharding
- Обирайте ключ, який рівномірно розподіляє дані
- Уникайте ключів, які часто змінюються
- Використовуйте складені ключі, якщо потрібно
2. Оптимізація продуктивності
- Використовуйте відповідні індекси
- Налаштуйте пул з'єднань
- Впровадьте моніторинг
3. Налаштування Spring Boot
spring:
data:
mongodb:
uri: mongodb://localhost:27017/bigdata
connection-pool-size: 100
connect-timeout: 2000
Висновки
Інтеграція Spring Boot з MongoDB у режимі sharding пропонує потужне рішення для застосунків, які потребують горизонтальної масштабованості.
Ця архітектура дозволяє:
- Ефективно керувати великими обсягами даних
- Підтримувати оптимальну продуктивність
- Забезпечувати високу доступність
Посилання на GitHub: https://github.com/ELMAALMIA/p-spring-mongodb
Перекладено з: Mise en place d’une Architecture Big Data avec Spring Boot et MongoDB Sharding