Overview
Este tutorial muestra cómo configurar un clúster en MongoDB Atlas y compilar una aplicación Spring Boot que utiliza Spring Data MongoDB para trabajar con un particionado users colección.
particionado
La particionado distribuye un conjunto de datos en varias máquinas. Esto es útil para aplicaciones con conjuntos de datos grandes o alto rendimiento de lectura y escritura. MongoDB admite dos enfoques de escalado: escalado vertical y escalado horizontal.
El escalado vertical incrementa la capacidad de un solo servidor al actualizar su CPU, RAM o almacenamiento. Este enfoque tiene límites basados en las capacidades de hardware y puede volverse costoso.
El escalado horizontal divide tu conjunto de datos y carga de trabajo entre múltiples servidores. Cada servidor gestiona un subconjunto de la carga de trabajo total, lo que puede proporcionar una mejor eficiencia que un solo servidor potente. MongoDB Atlas simplifica la gestión de clústeres fragmentados.
Para obtener más información sobre el particionado, consulta Particionado en el manual del MongoDB Server.
Tutorial
Este tutorial te muestra cómo realizar las siguientes acciones:
Verifique los requisitos previos
Configura un clúster particionado en MongoDB Atlas
Configura el particionado para una colección
Implementar la aplicación Spring Boot
Configura la aplicación Spring Boot
Verifique los requisitos previos
Antes de comenzar, asegúrate de tener lo siguiente:
Una cuenta de MongoDB. Necesitas un clúster M30 o superior para habilitar el particionamiento.
Un proyecto Spring Boot con dependencias de Spring Data MongoDB y Spring Web. Puedes crear un proyecto usando Spring Initializr.
Configura un clúster particionado en MongoDB Atlas
Para crear un clúster particionado, realiza las siguientes acciones:
En los ajustes del clúster de tu clúster M30 o superior, navega hasta Additional Settings.
Selecciona Sharding y actívalo.
Establecer el número de particiones a implementar. Para aplicaciones de producción, use más de una partición. Se puede realizar la implementación entre 1 y 70 particiones. Para aprender más, consulte Implementar un clúster en la documentación de Atlas.
Una vez que se haya creado tu clúster particionado, selecciona Load Sample Dataset para cargar los datos de muestra.
Configura el particionado para una colección
Spring Data MongoDB no configura automáticamente el particionado para las colecciones. Debe realizar estas operaciones manualmente utilizando mongosh.
Para conectarse a su clúster y configurar el particionamiento, ejecute el siguiente comando en su terminal:
mongosh "mongodb+srv://<username>:<password>@<cluster-url>/admin"
Sustituye los marcadores de posición <username>, <password> y <cluster-url> con tus credenciales y la cadena de conexión de MongoDB Atlas.
Para crear una partición de la colección users por el campo email, ejecute el siguiente comando:
sh.shardCollection("sample_mflix.users", { email: 1 })
Para verificar que el particionado está habilitado y que la colección está particionada, ejecuta el siguiente comando:
sh.status()
Implementar la aplicación Spring Boot
Para implementar la aplicación Spring Boot, debes definir las capas de entidad, repositorio, servicio y controlador.
Para definir una clase de entidad con particionado, usa la anotación
@Shardedpara especificar los campos de clave de partición. El siguiente código muestra una entidad de ejemploUsercon el campoemailcomo clave de partición:import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; import org.springframework.data.mongodb.core.mapping.Sharded; public class User { private String id; private String name; private String email; private String password; // Getters and Setters } La anotación
@Shardedayuda a Spring Data MongoDB a optimizar las operaciones en un entorno particionado. Garantiza que lasreplaceOnequeries incluyan la clave de partición durante las actualizaciones de inserción.Para crear un repositorio para la entidad
User, define una interfaz que amplíeMongoRepository. El siguiente código muestra una interfaz de ejemploUserRepository:import org.springframework.data.mongodb.repository.MongoRepository; import com.mongodb.sharded.model.User; public interface UserRepository extends MongoRepository<User, String> { } Para gestionar la lógica empresarial, crea una clase de servicio que interactúe con el repositorio. El siguiente código muestra un ejemplo de clase
UserService:import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.mongodb.sharded.model.User; import com.mongodb.sharded.repository.UserRepository; public class UserService { private UserRepository userRepository; public List<User> getAllUsers() { return userRepository.findAll(); } public User saveUser(User user) { return userRepository.save(user); } } Para exponer los endpoints REST para la entidad
User, cree una clase controladora. El siguiente código muestra una clase de ejemploUserController:import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; public class UserController { private UserService userService; public List<User> getAllUsers() { return userService.getAllUsers(); } public User createUser( User user) { return userService.saveUser(user); } }
Configura la aplicación Spring Boot
Para conectar su aplicación Spring Boot a MongoDB Atlas, agregue el URI de conexión de MongoDB a su archivo application.properties o application.yml. El siguiente código muestra una configuración de ejemplo:
spring.data.mongodb.uri=mongodb+srv://<username>:<password>@<cluster-url>/myDatabase?retryWrites=true&w=majority
Sustituye los marcadores de posición <username>, <password> y <cluster-url> con tus credenciales y la cadena de conexión de MongoDB Atlas.
Selección de Shard Key
Cuando elijas una clave de partición, verifica que distribuya los datos de manera uniforme entre las particiones. La elección de una clave de partición es fundamental para el rendimiento y la escalabilidad de tu clúster particionado. Para obtener más información sobre cómo seleccionar una clave de partición, consulta Elegir una clave de partición en el manual del servidor MongoDB.
Una clave de partición ideal tiene las siguientes características:
Alta cardinalidad: la clave tiene muchos valores únicos para distribuir los datos de manera uniforme entre las particiones. La clave no necesita ser completamente única.
Distribución uniforme: la clave distribuye los documentos de manera uniforme entre todas las particiones para evitar puntos críticos donde una partición maneje más datos o solicitudes que las demás.
Soporte para queries comunes: Elige una clave que se alinee con tus patrones de query más comunes para reducir la dispersión de queries y mejorar el rendimiento.
Para la colección users en la base de datos sample_mflix, el campo email funciona bien como clave de partición si:
Los correos electrónicos son únicos y están bien distribuidos.
Las consultas suelen filtrarse u ordenarse por correo electrónico.
Recursos adicionales
Para aprender más sobre particionado en MongoDB, consulta Particionado en el manual del MongoDB Server.