Overview
Este tutorial le muestra cómo configurar un clúster fragmentado en MongoDB Atlas y crear una aplicación Spring Boot que use Spring Data MongoDB para trabajar con un clúster fragmentado. users recopilación.
particionado
Lafragmentación distribuye un conjunto de datos entre varias máquinas. Esto resulta útil para aplicaciones con grandes conjuntos de datos o un alto rendimiento de lectura y escritura. MongoDB admite dos enfoques de escalado: vertical y horizontal.
El escalamiento vertical aumenta la capacidad de un solo servidor actualizando su CPU, RAM o almacenamiento. Este enfoque tiene limitaciones según las capacidades del hardware y puede resultar costoso.
El escalado horizontal divide el conjunto de datos y la carga de trabajo entre varios servidores. Cada servidor gestiona un subconjunto de la carga de trabajo total, lo que ofrece mayor eficiencia que un único servidor potente. MongoDB Atlas simplifica la gestión de clústeres fragmentados.
Para obtener más información sobre la fragmentación, consulte Fragmentación en el manual del servidor MongoDB.
Tutorial
Este tutorial te muestra cómo realizar las siguientes acciones:
Verificar los prerrequisitos
Configurar un clúster fragmentado en MongoDB Atlas
Configurar la fragmentación para una colección
Implementar la aplicación Spring Boot
Configurar la aplicación Spring Boot
Verificar los prerrequisitos
Antes de comenzar, verifique que tenga lo siguiente:
Una cuenta de MongoDB. Necesita un clúster M30 o superior para habilitar la fragmentación.
Un proyecto de Spring Boot con dependencias de Spring Data MongoDB y Spring Web. Puedes crear un proyecto con Spring Initializr.
Configurar un clúster fragmentado en MongoDB Atlas
Para crear un clúster fragmentado, realice las siguientes acciones:
En la configuración del clúster de su clúster M30 o superior, navegue a Additional Settings.
Seleccione Sharding y actívelo.
Establezca el número de fragmentos que se implementarán. Para aplicaciones de producción, use más de un fragmento. Puede implementar entre 1 y 70 fragmentos. Para obtener más información, consulte "Implementar un clúster fragmentado" en la documentación de Atlas.
Una vez creado el clúster fragmentado, seleccione Load Sample Dataset para cargar los datos de muestra.
Configurar la fragmentación para una colección
Spring Data MongoDB no configura automáticamente la fragmentación de colecciones. Debe realizar estas operaciones manualmente mediante mongosh.
Para conectarse a su clúster y configurar la fragmentación, ejecute el siguiente comando en su terminal:
mongosh "mongodb+srv://<username>:<password>@<cluster-url>/admin"
Reemplace los marcadores de posición <username>, <password> y <cluster-url> con sus credenciales de MongoDB Atlas y la cadena de conexión.
Para fragmentar la colección users por el campo email, ejecute el siguiente comando:
sh.shardCollection("sample_mflix.users", { email: 1 })
Para verificar que la fragmentación esté habilitada y que la colección esté fragmentada, ejecute el siguiente comando:
sh.status()
Implementar la aplicación Spring Boot
Para implementar la aplicación Spring Boot, debe definir las capas de entidad, repositorio, servicio y controlador.
Para definir una clase de entidad con fragmentación, utilice la anotación
@Shardedpara especificar los campos de clave de fragmentación. El siguiente código muestra un ejemplo de entidadUsercon el campoemailcomo clave de fragmentació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 fragmentado. Garantiza que las consultasreplaceOneincluyan la clave de fragmento durante las operaciones de upsert.Para crear un repositorio para la entidad
User, defina una interfaz que extiendaMongoRepository. El siguiente código muestra un ejemplo de interfazUserRepository: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 de negocio, cree una clase de servicio que interactúe con el repositorio. El siguiente código muestra un ejemplo de la 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 puntos finales REST de la entidad
User, cree una clase controladora. El siguiente código muestra un ejemplo de claseUserController: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); } }
Configurar la aplicación Spring Boot
Para conectar su aplicación Spring Boot a MongoDB Atlas, agregue la URI de conexión de MongoDB a su archivo application.properties o application.yml. El siguiente código muestra un ejemplo de configuración:
spring.data.mongodb.uri=mongodb+srv://<username>:<password>@<cluster-url>/myDatabase?retryWrites=true&w=majority
Reemplace los marcadores de posición <username>, <password> y <cluster-url> con sus credenciales de MongoDB Atlas y la cadena de conexión.
Selección de Shard Key
Al elegir una clave de fragmento, verifique que distribuya los datos uniformemente entre los fragmentos. La elección de una clave de fragmento es fundamental para el rendimiento y la escalabilidad de su clúster fragmentado. Para obtener más información sobre cómo seleccionar una clave de fragmento, consulte "Elegir una clave de fragmento" en el manual de MongoDB Server.
Una clave de fragmento ideal tiene las siguientes características:
Alta cardinalidad: La clave tiene muchos valores únicos para distribuir los datos uniformemente entre los fragmentos. No es necesario que sea completamente única.
Distribución uniforme: la clave distribuye los documentos de manera uniforme entre todos los fragmentos para evitar puntos críticos donde un fragmento maneja más datos o solicitudes que otros.
Compatibilidad con consultas comunes: elija una clave que se alinee con sus patrones de consulta más comunes para reducir la dispersión de consultas y mejorar el rendimiento.
Para la colección users en la base de datos sample_mflix, el campo email funciona bien como clave de fragmento si:
Los correos electrónicos son únicos y están bien distribuidos.
Las consultas frecuentemente se filtran u ordenan por correo electrónico.
Recursos adicionales
Para obtener más información sobre la fragmentación en MongoDB, consulte Fragmentación en el manual de MongoDB Server.