Visão geral
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.
Fragmentação
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.
Tutorial
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
Verifique os pré-requisitos
Antes de começar, verifique se você tem o seguinte:
Uma conta MongoDB. Você precisa de um cluster M30 ou superior para habilitar a fragmentação.
Um projeto Spring Boot com dependências do Spring Data MongoDB e do Spring Web. Você pode criar um projeto usando Spring Initializr.
Configurar um cluster fragmentado no MongoDB Atlas
Para criar um cluster fragmentado, execute as seguintes ações:
Nas configurações de cluster do seu cluster M30 ou superior, navegue até Additional Settings.
Selecione Sharding e ative-o.
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.
Após criar o cluster fragmentado , selecione Load Sample Dataset para carregar os dados de amostra.
Configurar fragmentação para uma coleção
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()
Implementar o aplicativo Spring Boot
Para implementar o aplicativo Spring Boot, você deve definir as camadas de entidade, repositório, serviço e controlador.
Para definir uma classe de entidade com fragmentação, use a anotação
@Shardedpara especificar os campos da chave de fragmento. O código a seguir mostra um exemplo de entidadeUsercom o campoemailcomo 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; public class User { private String id; private String name; private String email; private String password; // Getters and Setters } A anotação
@Shardedajuda o Spring Data MongoDB a otimizar as operações em um ambiente fragmentado. Ele garante que as queries doreplaceOneincluam a chave de fragmento durante os upserts.Para criar um repositório para a entidade
User, defina uma interface que se estendaMongoRepository. O seguinte código mostra um exemplo de interfaceUserRepository:import org.springframework.data.mongodb.repository.MongoRepository; import com.mongodb.sharded.model.User; public interface UserRepository extends MongoRepository<User, String> { } 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; public class UserService { private UserRepository userRepository; public List<User> getAllUsers() { return userRepository.findAll(); } public User saveUser(User user) { return userRepository.save(user); } } Para expor pontos de extremidade REST para a entidade
User, crie uma classe de controlador. O código a seguir mostra um exemplo da classeUserController: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 o aplicativo Spring Boot
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.
Seleção de chave de shard
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.
Recursos adicionais
Para saber mais sobre fragmentação no MongoDB, consulte fragmentação no manual do MongoDB Server.