Menu Docs
Página inicial do Docs
/ /

Tutorial: Implementar fragmentação na inicialização da Spring usando dados da Spring

Este tutorial mostra como configurar um cluster no MongoDB Atlas e criar um aplicativo Spring Boot que utiliza Spring Data MongoDB para trabalhar com uma coleção de users fragmentado.

A fragmentação distribui um conjunto de dados em várias máquinas. Isso é útil para aplicativos com grandes conjuntos de dados ou alta taxa de transferência de leitura e gravação. O MongoDB suporta duas abordagens de dimensionamento: dimensionamento vertical e dimensionamento horizontal.

O dimensionamento vertical aumenta a capacidade de um único servidor atualizando sua CPU, RAM ou armazenamento. Essa abordagem tem limites com base nos recursos do hardware e pode se tornar cara.

O dimensionamento horizontal divide seu conjunto de dados e carga de trabalho em vários servidores. Cada servidor lida com um subconjunto da carga de trabalho geral, o que pode fornecer melhor eficiência do que um único servidor poderoso. O MongoDB Atlas simplifica o gerenciamento de clusters.

Para saber mais sobre fragmentação, consulte fragmentação no manual do MongoDB Server.

Este tutorial mostra como executar as seguintes ações:

  • Verifique os pré-requisitos

  • Configurar um cluster fragmentado no MongoDB Atlas

  • Configurar fragmentação para uma coleção

  • Implementar o aplicativo Spring Boot

  • Configurar o aplicativo Spring Boot

1

Antes de começar, verifique se você tem o seguinte:

2

Para criar um cluster fragmentado, execute as seguintes ações:

  1. Nas configurações de cluster do seu cluster M30 ou superior, navegue até Additional Settings.

  2. Selecione Sharding e ative-o.

  3. Defina o número de fragmentos a serem implantados. Para aplicativos de produção, use mais de um fragmento. Você pode implantar entre 1 e 70 fragmentos. Para saber mais, consulte Implantar um cluster fragmentado na documentação do Atlas.

  4. Após criar o cluster fragmentado , selecione Load Sample Dataset para carregar os dados de amostra.

3

O Spring Data MongoDB não configura automaticamente a fragmentação para coleções. Você deve executar estas operações manualmente usando mongosh.

Para se conectar ao cluster e configurar a fragmentação, execute o seguinte comando no terminal:

mongosh "mongodb+srv://<username>:<password>@<cluster-url>/admin"

Substitua os placeholders <username>, <password> e <cluster-url> pelas suas credenciais do MongoDB Atlas e string de conexão.

Para fragmentar a coleção users pelo campo email , execute o seguinte comando:

sh.shardCollection("sample_mflix.users", { email: 1 })

Para verificar se a fragmentação está habilitada e a coleção está fragmentado, executar o seguinte comando:

sh.status()
4

Para implementar o aplicativo Spring Boot, você deve definir as camadas de entidade, repositório, serviço e controlador.

  1. Para definir uma classe de entidade com fragmentação, use a anotação @Sharded para especificar os campos da chave de fragmento. O código a seguir mostra um exemplo de entidade User com o campo email como a chave de fragmento:

    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
    }

    A anotação @Sharded ajuda o Spring Data MongoDB a otimizar as operações em um ambiente fragmentado. Ele garante que as queries do replaceOne incluam a chave de fragmento durante os upserts.

  2. Para criar um repositório para a entidade User, defina uma interface que se estenda MongoRepository. O seguinte código mostra um exemplo de interface UserRepository:

    import org.springframework.data.mongodb.repository.MongoRepository;
    import com.mongodb.sharded.model.User;
    public interface UserRepository extends MongoRepository<User, String> {
    }
  3. Para lidar com a lógica de negócios, crie uma classe de serviço que interaja com o repositório. O código a seguir mostra um exemplo da classe 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 expor pontos de extremidade REST para a entidade User, crie uma classe de controlador. O código a seguir mostra um exemplo da classe 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 seu aplicativo Spring Boot ao MongoDB Atlas, adicione o URI de conexão do MongoDB ao seu arquivo application.properties ou application.yml. O seguinte código mostra um exemplo de configuração:

spring.data.mongodb.uri=mongodb+srv://<username>:<password>@<cluster-url>/myDatabase?retryWrites=true&w=majority

Substitua os placeholders <username>, <password> e <cluster-url> pelas suas credenciais do MongoDB Atlas e string de conexão.

Ao escolher uma chave de fragmento, verifique se ela distribui os dados uniformemente entre os fragmentos. A escolha de uma chave de fragmento é fundamental para o desempenho e a escalabilidade do seu cluster fragmentado. Para saber mais sobre como selecionar uma chave de fragmento, consulte Escolher uma chave de fragmento no manual do MongoDB Server.

Uma chave de fragmento ideal tem as seguintes características:

  • Alta cardinalidade: a chave tem muitos valores exclusivos para distribuir dados uniformemente entre os fragmentos. A chave não precisa ser totalmente exclusiva.

  • Distribuição uniforme: a chave distribui documentos uniformemente em todos os fragmentos para evitar pontos de acesso em que um fragmento lida com mais dados ou solicitações do que outros.

  • Suporte para queries comuns: escolha uma chave que se alinhe com seus padrões de query mais comuns para reduzir a dispersão de queries e melhorar o desempenho.

Para a coleção users no banco de dados sample_mflix, o campo email funciona bem como uma chave de fragmento se:

  • Os e-mails são exclusivos e bem distribuídos.

  • As queries frequentemente são filtradas ou classificadas por e-mail.

Para saber mais sobre fragmentação no MongoDB, consulte fragmentação no manual do MongoDB Server.

Voltar

Introdução ao MongoDB da Spring Session

Nesta página