Налаштування архітектури Big Data за допомогою Spring Boot та шардінгу MongoDB

Зміст

  • Вступ
  • Загальна архітектура
  • Чому Sharding в MongoDB?
  • Налаштування кластера
  • Інтеграція з Spring Boot
  • Висновки

Вступ

У сучасному світі Big Data здатність ефективно керувати великими обсягами даних стала критично важливою. У цій статті ми розглянемо, як побудувати надійну архітектуру, поєднуючи потужність Spring Boot з можливостями sharding в MongoDB.

Загальна архітектура

Перш ніж заглиблюватися в деталі реалізації, ось загальний огляд архітектури, яку ми будемо реалізовувати:

pic

Загальна архітектура

Ця архітектура ілюструє різні компоненти нашої системи:

  • Шар додатка 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();  
}

Для того, щоб отримати максимальну вигоду від цієї архітектури, ось кілька основних найкращих практик:

  1. Вибір ключа 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

Leave a Reply

Your email address will not be published. Required fields are marked *