Avalados por :

Otimizando a conexão com o MongoDB Atlas a partir das Funções do SAP Cloud

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 1 Vistas
0
Cargando...

Estou utilizando as Funções do SAP Cloud. Meu caso de uso é muito simples: o usuário chama a função, a função se conecta ao MongoDB Atlas com a string de conexão (não usando o serviço SAP CP Mongo, pois ainda não é suportado), realiza operações CRUD e retorna resultados.

Eu defini minha função na nuvem da seguinte maneira - index.js -

  const mongoose = require('mongoose');
  const Address = require('./models/Address')
  module.exports = async function(event, context)
  {
   const mongoConfig = context.getSecretValueJSON('mongodb','config.json');
   try{
   await mongoose.connect(mongoConfig.config.uri,
   { useNewUrlParser:true,useCreateIndex:true}); 
   console.log("Conectado ao banco de dados") 
   let address = new Address({"city":"Berlim"}) 
   await address.save() 
   console.log("Informações de endereço salvas com sucesso") 
   return address; 
   }catch(error){ 
   console.log("Erro - "+ error) 
   return error }
  };
  

O esquema e modelo correspondente estão definidos em um arquivo diferente - Address.js

const mongoose = require("mongoose");

const addressSchema = new mongoose.Schema({
    city: {
        type: String,
        required: true,
        trim: true
    }
}, { strict: false });

const Address = mongoose.model('Address', addressSchema);

module.exports = Address

Agora, o problema é que toda vez que a função é chamada, o mongoose abre uma nova conexão com o banco de dados, o que me parece uma forma muito ineficiente de fazer as coisas. Gostaria de saber como organizar o código para que a conexão seja feita apenas uma vez (preferencialmente durante o deploy inicial da função).

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

3 Respuestas

0
Cargando...

Olá boudhayan_dev ,

ok. Não tenho certeza de como o FaaS é executado em segundo plano, pois até onde sei não há opções para ir a um "nível mais profundo" e ter menos abstração. Mas seria interessante saber mais sobre isso.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Marius Obert

FaaS é definitivamente adequado para o nosso caso de uso. A demora devido à conexão não é muito significativa, mas ainda assim gostaria de mantê-la ao mínimo. Entendo que o FaaS utiliza contêineres do Kubernetes para o deployment. Então, quando a função é reiniciada após um longo período de tempo, o mesmo contêiner é utilizado? Se for o mesmo contêiner, posso realizar uma conexão condicional.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Boudhayan!

Excelente pergunta! Não tenho uma resposta definitiva para isso, diria que é mais uma questão de opinião.

O modelo de negócios por trás do FaaS é que você só paga quando sua função é executada. Isso significa que sua função pode não estar "ativa" em absoluto durante certos intervalos de tempo. O provedor só "iniciará" sua função quando você tentar acessá-la. Por exemplo, manter uma conexão aberta através de várias solicitações provavelmente não é possível, já que a função pode ser encerrada.

Se você precisa chamar essa função com tanta frequência que o custo de criar as conexões é muito caro, pode valer a pena considerar se realmente precisa do FaaS em primeiro lugar.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?