Docs Menu
Docs Home
/ /

Tutorial: Implementar fragmentación en Spring Boot mediante Spring Data

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.

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.

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

1

Antes de comenzar, verifique que tenga lo siguiente:

2

Para crear un clúster fragmentado, realice las siguientes acciones:

  1. En la configuración del clúster de su clúster M30 o superior, navegue a Additional Settings.

  2. Seleccione Sharding y actívelo.

  3. 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.

  4. Una vez creado el clúster fragmentado, seleccione Load Sample Dataset para cargar los datos de muestra.

3

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()
4

Para implementar la aplicación Spring Boot, debe definir las capas de entidad, repositorio, servicio y controlador.

  1. Para definir una clase de entidad con fragmentación, utilice la anotación @Sharded para especificar los campos de clave de fragmentación. El siguiente código muestra un ejemplo de entidad User con el campo email como 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;
    @Document("users")
    @Sharded(shardKey = { "email" })
    public class User {
    @Id
    private String id;
    private String name;
    @Field("email")
    private String email;
    private String password;
    // Getters and Setters
    }

    La anotación @Sharded ayuda a Spring Data MongoDB a optimizar las operaciones en un entorno fragmentado. Garantiza que las consultas replaceOne incluyan la clave de fragmento durante las operaciones de upsert.

  2. Para crear un repositorio para la entidad User, defina una interfaz que extienda MongoRepository. El siguiente código muestra un ejemplo de interfaz UserRepository:

    import org.springframework.data.mongodb.repository.MongoRepository;
    import com.mongodb.sharded.model.User;
    public interface UserRepository extends MongoRepository<User, String> {
    }
  3. 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;
    @Service
    public class UserService {
    @Autowired
    private UserRepository userRepository;
    public List<User> getAllUsers() {
    return userRepository.findAll();
    }
    public User saveUser(User user) {
    return userRepository.save(user);
    }
    }
  4. Para exponer los puntos finales REST de la entidad User, cree una clase controladora. El siguiente código muestra un ejemplo de clase UserController:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import java.util.List;
    @RestController
    @RequestMapping("/users")
    public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping
    public List<User> getAllUsers() {
    return userService.getAllUsers();
    }
    @PostMapping
    public User createUser(@RequestBody User user) {
    return userService.saveUser(user);
    }
    }
5

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.

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.

Para obtener más información sobre la fragmentación en MongoDB, consulte Fragmentación en el manual de MongoDB Server.

Volver

Introducción a Spring Session MongoDB

En esta página