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
Produtoschevron-right
Atlaschevron-right

Desmistificando procedimentos armazenados no MongoDB

Sourabh Bagrecha6 min read • Published Aug 01, 2024 • Updated Aug 01, 2024
Node.jsJavaScriptAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Se você já usou um banco de dados SQL, deve ter lido sobre procedimentos armazenados. Os procedimentos armazenados representam código SQL pré-escrito projetado para reutilização. Ao armazenar queries SQL usadas com frequência como procedimentos, você pode executá-las repetidamente. Além disso, esses procedimentos podem ser parametrizados, permitindo que eles operem em valores de parâmetro especificados. Muitas vezes, os desenvolvedores se perguntam:
  • O MongoDB suporta procedimentos armazenados?
  • Onde você escreve a lógica para procedimentos armazenados no MongoDB?
  • Como posso executar uma query a cada meia-noite, como um trabalho CRON?
No artigo de hoje, vamos responder a essas perguntas e desmistificar os procedimentos armazenados no MongoDB.

O MongoDB suporta procedimentos armazenados?

Essenciais, um procedimento armazenado consiste em um conjunto de declarações SQL capazes de aceitar parâmetros, executar tarefas e, opcionalmente, retornar valores. No mundo do MongoDB, podemos conseguir isso usando um pipeline de agregaçãodo.
Em poucas palavras, um pipeline de agregação é basicamente uma série de estágios em que a saída de um estágio específico é uma entrada para o próximo estágio, e a saída do último estágio é o resultado final.
Agora, cada estágio executa algum tipo de processamento na entrada fornecida, como filtragem, agrupamento, modelagem, cálculo etc. Você pode até realizar pesquisa vetorial e pesquisade texto completo usando a plataforma de dados para desenvolvedores unificada do MongoDB, Atlas.
Vamos ver como o pipeline de agregação do MongoDB, os gatilhos Atlas e o change stream juntos podem atuar como uma alternativa supereficiente, poderosa e flexível aos procedimentos armazenados.

O que é o MongoDB Atlas?

O MongoDB Atlas é uma plataforma de dados para desenvolvedores multinuvem cujo objetivo é tornar o trabalho com dados incrivelmente fácil. Ele oferece o ambiente ideal para executar o MongoDB, a solução principal de relational database.
O modelo de documento do MongoDB facilita a inovação rápida ao alinhar-se diretamente com os objetos em seu código. Essa integração perfeita torna a manipulação de dados mais intuitiva e eficiente. Com o MongoDB, você tem a flexibilidade de armazenar dados de diversas estruturas e adaptar seu esquema sem esforço à medida que seu aplicativo envolve novas funcionalidades.
O banco de dados Atlas está disponível em 100regiões + na AWS, Google Cloud e Azure. Você pode até mesmo tirar proveito de implantações multinuvem e multirregionais, permitindo que você se dirija aos fornecedores e regiões que melhor atendam aos seus usuários. Possui a melhor automação da categoria e práticas comprovadas que garantem disponibilidade, escalabilidade e conformidade com os mais exigentes padrões de segurança e privacidade de dados.

O que é um Atlas Trigger?

Os gatilhos do Atlas de banco de dados permitem a execução da lógica do lado do servidor sempre que um documento passa por adição, modificação ou exclusão em um Atlas cluster conectado.
Ao contrário dos triggers de dados SQL convencionais confinados ao servidor de banco de dados, osAtlas Triggers operam em uma camada de computação sem servidor capaz de escalar automicamente a partir do servidor de banco de dados.
Ele invoca perfeitamente o Atlas Functions e também pode facilitar o encaminhamento de eventos para manipuladores externos por meio do Amazon EventBridge.

Como os Atlas Triggers podem ser invocados?

Um Atlas Trigger pode acionar em:
  • Um tipo de operação específico em uma determinada coleção, como inserir, atualizar e excluir.
  • Um evento de autenticação, como a criação ou exclusão do usuário.
  • Um horário agendado, como uma tarefa CRON.

Tipos de triggers do Atlas

Existem três tipos de trigger no Atlas:
Consulte Configurar Atlas Triggers para opções avançadas.

Atlas Triggers em ação

Vamos comparar como os procedimentos armazenados podem ser implementados no SQL e no MongoDB usando triggers, funções e aggregation pipelines.

O caminho SQL

Aqui está um exemplo de um procedimento armazenado no MySQL que calcula a receita total do dia toda vez que um novo pedido é inserido em uma tabela de pedidos:
1DELIMITER $$
2
3CREATE PROCEDURE UpdateTotalRevenueForToday()
4BEGIN
5 DECLARE today DATE;
6 DECLARE total_revenue DECIMAL(10, 2);
7
8 -- Get today's date
9 SET today = CURDATE();
10
11 -- Calculate total revenue for today
12 SELECT SUM(total_price) INTO total_revenue
13 FROM orders
14 WHERE DATE(order_date) = today;
15
16 -- Update total revenue for today in a separate table or perform any other necessary action
17 -- Here, I'm assuming you have a separate table named 'daily_revenue' to store daily revenue
18 -- If not, you can perform any other desired action with the calculated total revenue
19
20 -- Update or insert the total revenue for today into the 'daily_revenue' table
21 INSERT INTO daily_revenue (date, revenue)
22 VALUES (today, total_revenue)
23 ON DUPLICATE KEY UPDATE revenue = total_revenue;
24END$$
25
26DELIMITER ;
Neste procedimento armazenado:
  • Declaramos duas variáveis: today para armazenar a data de hoje e total_revenue para armazenar a receita total calculada para hoje.
  • Usamos um comando SELECT para calcular a receita total de hoje a partir da tabela de pedidos em que order_date corresponde à data de hoje.
  • Em seguida, atualizamos a tabela daily_revenue com a data de hoje e a receita total calculada. Se já houver uma entrada para a data de hoje, ela atualizará a receita. Caso contrário, insere uma nova linha para a data de hoje.
Agora, temos que criar um trigger para chamar esse procedimento armazenado toda vez que um novo pedido for inserido na tabela de pedidos. Aqui está um exemplo de como criar esse gatilho:
1CREATE TRIGGER AfterInsertOrder
2AFTER INSERT ON orders
3FOR EACH ROW
4BEGIN
5 CALL UpdateTotalRevenueForToday();
6END;
Esse trigger chamará o procedimento armazenado UpdateTotalRevenueForToday() toda vez que uma nova linha for inserida na tabela de pedidos.

O jeito MongoDB

Se você não tiver um MongoDB database existente implantado no Atlas, comece gratuitamente e obtenha 500MBs de armazenamento gratuito para sempre.
Agora, tudo o que precisamos fazer é criar um Atlas Trigger e implementar uma Atlas Function nele.
insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui
  1. Selecione o Tipo de Trigger como "Database ", pois queremos que nosso trigger responda a eventos do banco de dados em vez de em um agendamento definido.
  2. Dê a esse trigger um nome de sua escolha.
  3. Selecione uma Fonte de Dados à qual você deseja que este gatilho seja vinculado.
  4. Estamos monitorando um "Collection ", pois queremos que esse trigger seja executado toda vez que um novo documento for inserido na coleção de pedidos.
  5. Selecione o nome deCluster, Banco deDadose Coleçãoapropriado onde você deseja que este trigger observe quaisquer alterações.
  6. Estamos interessados apenas em que novos pedidos sejam criados em nosso aplicativo, portanto, escolheremos apenas "Insert Document " em Tipo de operação.
  7. Ative a opçãoDocumento completo para esse trigger.
  8. Você pode manter as outras opções em seu estado padrão. Saiba mais sobre como configurar os acionadores do banco de dados do Atlas.
insira a descrição da imagem aqui
Finalmente, implementaremos a seguinte Atlas Function no editor de funções:
1exports = async function (changeEvent) {
2 //Get the date from the newly inserted document
3 const date = changeEvent.fullDocument.order_date;
4 const ordersCollection = context.services.get("triggers-demo").db("business").collection("orders");
5 const dailyRevenueCollection = context.services.get("triggers-demo").db("business").collection("daily_revenue");
6
7 const pipeline = [
8 {
9 $group: {
10 _id: date,
11 total_revenue: { $sum: "$total_amount" }
12 }
13 }
14 ];
15
16 const result = await ordersCollection.aggregate(pipeline).toArray();
17 const totalRevenue = result.length > 0 ? result[0].total_revenue : 0;
18
19 await dailyRevenueCollection.updateOne(
20 { date: date },
21 { $set: { revenue: totalRevenue } },
22 { upsert: true }
23 );
24};
Pressione "Save."
insira a descrição da imagem aqui

Teste

Agora, para testar se nosso trigger está funcionando corretamente, vamos inserir um documento em nossa collection de pedidos:
1{
2 "_id": { "$oid": "65c357c89b2a791ae372bce3" },
3 "order_date": "07-02-2024",
4 "total_amount": 1499
5}
insira a descrição da imagem aqui
Para verificar se nosso trigger foi executado com êxito, podemos verificar a dailyRevenue collection, e, se ela contiver um novo documento com a mesma data que usamos no pedido recém-inserido, parabéns - você implementou com êxito um trigger Atlas totalmente funcional.
insira a descrição da imagem aqui

Conclusão

Normalmente, você usaria um procedimento armazenado em SQL quando estivesse tentando executar queries complexas no banco de dados com frequência.
Os procedimentos armazenados foram inicialmente elogiados por suas vantagens percebidas em termos de desempenho, eficiência e segurança. No entanto, suas desvantagens — incluindo desafios de manutenção, portabilidade limitada e funções confusas entre desenvolvedores e administradores de banco de dados — tornaram-se cada vez mais aparentes nos paradigmas arquitetônicos modernos.
Por outro lado, o MongoDB torna incrivelmente fácil trabalhar com dados. Ele fornece ferramentas e técnicas modernas que nos ajudam a criar aplicativos orientados a eventos extraordinariamente rápidos.
As funcionalidades doMongoDB , como aggregation pipelines e change streams, são alternativas poderosas aos procedimentos armazenados tradicionais. O MongoDB Atlas, a plataforma de dados para desenvolvedores, aumenta ainda mais a flexibilidade de desenvolvimento com recursos como Atlas Functions e Atlas Triggers, permitindo a integração perfeita da lógica do lado do servidor dentro do ambiente de banco de dados.
A migração de procedimentos armazenados para MongoDB não é apenas uma mudança tecnologia; representa uma mudança de paradigma no sentido de abranger um cenário digital pronto para o futuro. À medida que as organizações fazem a transição, elas obtêm a capacidade de aproveitar as soluções avançadas do MongoDB, mantendo a agilidade, melhorando o desempenho e aderindo às práticas de desenvolvimento Contemporâneas.
Então, o que você está esperando? Cadastre-se no Atlas hoje mesmo e experimente a alternativa moderna aos procedimentos armazenados no MongoDB.
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
Artigo

Pausar automaticamente clusters inativos


Sep 09, 2024 | 10 min read
Tutorial

Primeiro passos na segurança do Atlas Stream Processing


May 17, 2024 | 9 min read
Início rápido

Guia de início rápido para aplicativos RAG usando LangChain e LlamaIndex


Sep 18, 2024 | 10 min read
Tutorial

Descubra seu Airbnb ideal: implementando um Spring Boot e Atlas Search com o driver Kotlin Sync


Oct 02, 2024 | 8 min read
Sumário