Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
Javachevron-right

Leve fragmentação para seu aplicativo do Spring Boot com o Spring Data MongoDB

Tim Kelly4 min read • Published Jul 08, 2024 • Updated Jul 08, 2024
SpringJava
SNIPPET
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Você está atingindo seus limites. Seu aplicativo está consumindo grandes quantidades de dados todos os dias. Mais recursos, mais interações, tudo o que você queria que seu aplicativo alcançasse, mas chegou a um gargalo. Com um aplicativo com alto rendimento, o sharding pode ser a solução que você procura.
{Sharding é um método de distribuição de umconjunto de dados em várias máquinas. Bancos de dados com conjuntos de dados ou taxa de transferência de leitura/gravação suficientemente grandes podem desafiar a capacidade de um único servidor. Há dois métodos para enfrentar esse desafio: escalonamento vertical e escalonamento horizontal.
O dimensionamento vertical é simples. As taxas de query estão esgotando a CPU? Atualize a CPU! Meu conjuntos de trabalho excederam o tamanho da RAM do sistema? Mais RAM! Embora a atualização de seu servidor seja uma solução perfeitamente válida e, muitas vezes, correta, há limites. O hardware só fica tão bom, graças aos limites da tecnologia. E, muitas vezes, o custo crescente é exponencial em comparação com o retorno do seu capital, então você atinge um ponto de retornos decrescentes.
O dimensionamento horizontal significa dividir seu conjunto de dados e carga de trabalho em vários servidores (como por meio de fragmentação). Cada máquina pode ser tão poderosa quanto a anterior, mas lida apenas com um subconjunto da carga de trabalho geral, proporcionando potencialmente melhor eficiência do que um servidor superpotente. "Muitas mãos fazem a luz funcionar!"
A desvantagem é uma maior complexidade na infraestrutura, mas expandir a capacidade significa apenas adicionar novos servidores conforme necessário, e o MongoDB Atlas reduz grande parte da complexidade do gerenciamento de clusters fragmentados.

Pré-requisitos

Configure o sharding do MongoDB Atlas

Crie um cluster fragmentado, M30 ou superior. Ao criar seu cluster, em configurações adicionais, selecione Fragmentação e alterne para ativado. Defina o número de fragmentos a serem implantados com o cluster fragmentado. Para aplicativos de produção, use mais de um fragmento ou você não poderá colher todos os benefícios do cluster fragmentado, sobre o qual você pode ler mais na documentação de fragmentação. Isso pode ser entre 1 e 100 fragmentos, inclusive. Aguarde até que o cluster seja criado. Isso levará alguns minutos, então pegue uma xícara de café ou role seus TikToks. Depois de configurado, selecione carregar os dados de exemplopara este tutorial.
O Spring Data MongoDB não configura automaticamente a fragmentação para collection. Você precisa executar essas operações manualmente. Podemos fazer isso usando mongosh.
Conecte-se ao seu cluster do MongoDB como administrador com sua string de conexão por meio de mongosh:
1mongosh "mongodb+srv://<username>:<password>@<cluster-url>/admin"
Fragmente a coleção de usuários por e-mail:
1sh.shardCollection("sample_mflix.users", { email: 1 })
Você pode verificar se a fragmentação está habilitada e se a collection está fragmentada executando sh.status().

Defina sua entidade com fragmentação no Spring Data

Em seu projeto de inicialização Spring, defina uma classe de entidade e use a anotação@Sharded para especificar os campos de chave de shard.
O Spring Data MongoDB usa a anotação@Sharded para identificar entidades armazenadas em collection fragmentadas.
1import org.springframework.data.annotation.Id;
2import org.springframework.data.mongodb.core.mapping.Document;
3import org.springframework.data.mongodb.core.mapping.Field;
4import org.springframework.data.mongodb.core.mapping.Sharded;
5
6@Document("users")
7@Sharded(shardKey = { "email" })
8public class User {
9
10 @Id
11 private String id;
12 private String name;
13 @Field("email")
14 private String email;
15 private String password;
16
17 // Getters and Setters
18}
Adicionar a anotação @Shardeda uma entidade ajuda o Spring Data MongoDB a otimizar as operações em um ambiente fragmentado. Ela garante que a chave do fragmento seja incluída nas consultasreplaceOne durante os upserts. Às vezes, isso pode exigir uma verificação adicional para encontrar o valor atual da chave de fragmento.

Crie um repositório do MongoDB

Defina uma interface de repositório para sua entidadeUser estendendo MongoRepository.
1import org.springframework.data.mongodb.repository.MongoRepository;
2
3import com.mongodb.sharded.model.User;
4
5public interface UserRepository extends MongoRepository<User, String> {
6}

Crie uma camada de serviço

Crie uma classe de serviço para lidar com a lógica comercial e interagir com o repositório.
1import java.util.List;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Service;
5
6import com.mongodb.sharded.model.User;
7import com.mongodb.sharded.repository.UserRepository;
8
9@Service
10public class UserService {
11
12 @Autowired
13 private UserRepository userRepository;
14
15 public List<User> getAllUsers() {
16 return userRepository.findAll();
17 }
18
19 public User saveUser(User user) {
20 return userRepository.save(user);
21 }
22}

Crie uma camada de controlador

Crie uma classe de controlador para expor os pontos de extremidade REST para a entidadeUser.
1import org.springframework.beans.factory.annotation.Autowired;
2import org.springframework.web.bind.annotation.*;
3
4import java.util.List;
5
6@RestController
7@RequestMapping("/users")
8public class UserController {
9
10 @Autowired
11 private UserService userService;
12
13 @GetMapping
14 public List<User> getAllUsers() {
15 return userService.getAllUsers();
16 }
17
18 @PostMapping
19 public User createUser(@RequestBody User user) {
20 return userService.saveUser(user);
21 }
22}

Configurar o aplicativo Spring Boot

Certifique-se de que seu aplicativo Spring Boot esteja configurado para se conectar ao MongoDB Atlas. Em seu application.properties ou application.yml, forneça o URI de conexão do MongoDB.
1spring.data.mongodb.uri=mongodb+srv://<username>:<password>@<cluster-url>/myDatabase?retryWrites=true&w=majority
Substitua <username>, <password>e <cluster-url> pelas suas credenciais e connection string do MongoDB Atlas.

Melhores práticas

Escolha uma chave de fragmentação que garanta uma distribuição uniforme dos dados. A escolha de uma chave de fragmentação é fundamental para o desempenho e a escalabilidade do cluster fragmentado. Uma chave de fragmentação ideal deve:
  • Ter alta cardinalidade: Isso significa que a chave deve ter muitos valores exclusivos para garantir que os dados sejam distribuídos uniformemente entre os shards. Não é necessário que uma chave de sharding seja totalmente exclusiva.
  • Forneça uma distribuição uniforme: a chave deve distribuir os documentos uniformemente em todos os fragmentos para evitar pontos de acesso em que um fragmento processa mais dados ousolicitações do que outros.
  • Suporte a consultas comuns: escolha uma chave que se alinhe aos padrões de consulta mais comuns para minimizar a dispersão de consultas e otimizar o desempenho.
Para a collection de usuários no banco de dadossample_mflix, o uso do campo de e-mail como chave de fragmentação pode ser uma boa opção se:
  • Os e-mails são exclusivos e bem distribuídos.
  • As consultas frequentemente são filtradas ou classificadas por e-mail.

Conclusão

A fragmentação com MongoDB Atlas e Spring Boot permite que seu aplicativo seja dimensionado com eficiência e lide com cargas altas com desempenho e disponibilidade aprimorados. Seguindo este guia, você pode configurar um banco de dados fragmentado, desenvolver microsserviços e garantir que seu aplicativo esteja pronto para crescer e ter sucesso em um ambiente rigoroso.
Se quiser saber mais sobre MongoDB e Java, leia mais no Developer Center, onde você pode aprender a implantar seu aplicativo sharded spring como um microsserviço com o Azure e o Kubernetes. Ou, se você tiver alguma dúvida, acesse nossosfóruns da MongoDB Community.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Desenvolvimento sem servidor com AWS Lambda e MongoDB Atlas usando Java


Jul 20, 2023 | 6 min read
Tutorial

Tutorial de ponta a ponta do Kafka para MongoDB Atlas


Jun 07, 2023 | 6 min read
Artigo

Usar o Atlas Search do Java


Jul 14, 2023 | 13 min read
Tutorial

Construindo um Painel de Vendas Dinâmico e em Tempo Real no MongoDB


Aug 05, 2024 | 7 min read
Sumário
  • Pré-requisitos