Avalados por :

Optimizando la conexión a MongoDB Atlas desde las Funciones de SAP Cloud

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

Estoy utilizando las Funciones de SAP Cloud. Mi caso de uso es muy sencillo: el usuario llama a la función, la función se conecta a MongoDB Atlas con la cadena de conexión (no utilizando el servicio SAP CP Mongo ya que aún no está soportado), realiza operaciones CRUD y devuelve resultados.

He definido mi función en la nube de la siguiente manera - index.js -

  const mongoose = require('mongoose');
  constAddress= require('./models/Address')
  module.exports =asyncfunction(event, context)
  {
   const mongoConfig = context.getSecretValueJSON('mongodb','config.json');
   try{
   await mongoose.connect(mongoConfig.config.uri,
   { useNewUrlParser:true,useCreateIndex:true}); 
   console.log("Conectado a la base de datos") 
   let address =new Address({"city":"Berlín"}) 
   await address.save() 
   console.log("Información de dirección guardada exitosamente") 
   return address; 
   }catch(error){ 
   console.log("Error - "+ error) 
   return error }
  };
  

El esquema y modelo correspondiente están definidos en un archivo 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

Ahora, el problema es que cada vez que se llama a la función, mongoose abre una nueva conexión a la base de datos, lo cual me parece una forma muy ineficiente de hacer las cosas. Me gustaría saber cómo organizar el código para que la conexión se realice solo una vez (preferiblemente durante el despliegue inicial de la función).

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

3 Respuestas

0
Cargando...

Hola boudhayan_dev ,

ok. No estoy seguro de cómo se ejecuta FaaS en segundo plano, ya que hasta donde sé no hay opciones para ir a un "nivel más profundo" y tener menos abstracción. Pero sería interesante saberlo.

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

Hola Marius Obert

FaaS definitivamente es adecuado para nuestro caso de uso. La demora debido a la conexión no es muy significativa, pero aún así me gustaría mantenerla al mínimo. Entiendo que FaaS utiliza contenedores de Kubernetes para el despliegue. Entonces, ¿cuando la función se reinicia después de un largo período de tiempo, se utiliza el mismo contenedor? Si es el mismo contenedor, puedo realizar una conexión condicional.

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

¡Hola Boudhayan!

¡Muy buena pregunta! No tengo una respuesta definitiva para esto, diría que es más una cuestión de opinión.

El modelo de negocio detrás de FaaS es que solo pagas cuando se ejecuta tu función. Esto significa que tu función puede no estar "activa" en absoluto durante ciertos intervalos de tiempo. El proveedor solo "iniciará" tu función cuando intentes acceder a ella. Por ejemplo, mantener una conexión abierta a través de múltiples solicitudes probablemente no sea posible, ya que la función podría ser terminada.

Si necesitas llamar a esta función tan a menudo que el costo de crear las conexiones es demasiado caro, podría valer la pena considerar si realmente necesitas FaaS en primer 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?