Controladores

Controlador MongoDB

Esta documentación explica la implementación del controlador MongoDB y cómo los parámetros de conexión se corresponden con los campos de la interfaz de usuario en la aplicación Gigantic.

Parámetros de Conexión

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
Hosthost en la configuración de conexión de mongodbEl nombre de host o dirección IP del servidor MongoDBSílocalhost
Puertoport en la configuración de conexión de mongodbEl número de puerto en el que escucha el servidor MongoDBSí27017 (de driverPorts)
Base de Datosdb en la configuración de conexión de mongodbEl nombre de la base de datos a la que conectarseSíNinguno (debe ser especificado)
Nombre de Usuariouser en la configuración de conexión de mongodbUsuario de base de datos para autenticaciónNoNinguno
Contraseñapassword en la configuración de conexión de mongodbContraseña para el usuario de base de datosNoNinguno

Detalles Técnicos

La implementación del controlador MongoDB utiliza la biblioteca Node.js mongodb con MongoClient para conexiones.

  • Base de datos basada en documentos que utiliza colecciones en lugar de tablas
  • Formato de cadena de conexión: mongodb://host:port o URL personalizada via config.url
  • La extracción de esquemas se realiza mediante muestreo de documentos de las colecciones
  • Las relaciones de clave foránea se detectan buscando referencias ObjectId entre colecciones
  • Utiliza un enfoque de muestreo de documentos para la inferencia de esquemas
  • Soporta opciones de conexión como useUnifiedTopology: true

Cuando el túnel SSH está habilitado, las conexiones se establecen primero a través del túnel antes de conectarse al servidor MongoDB.

Opciones de Autenticación

MongoDB soporta autenticación estándar usuario/contraseña y también autenticación basada en cadena de conexión.

Tipo de AutenticaciónMapeo UIDescripción
NingunaSin campos de usuario/contraseñaConecta sin autenticación
ContraseñaCampos de usuario/contraseñaAutenticación estándar usuario/contraseña
Gestor de ContraseñasVarios campos de gestores de contraseñasObtiene credenciales de gestores de contraseñas externos

Soporte de Túnel SSH

El controlador MongoDB soporta túneles SSH para acceso seguro a bases de datos detrás de firewalls o en redes privadas. Para información detallada sobre la configuración de túneles SSH, por favor consulte la documentación de Túneles SSH.

Endpoints de API Utilizados

Las conexiones MongoDB se utilizan principalmente en:

  • Creación de Tap (descubrimiento de fuente de datos)
  • Creación de Sink (destino de datos para datos anonimizados)
  • Ejecución de Pipeline (extracción y carga de datos)

Tablas Grandes y Reanudación

Esta sección recoge solo lo propio de MongoDB. Cómo funcionan la reanudación, los rangos paralelos y las estimaciones de filas en todos los controladores se explica en Bases de datos grandes.

Lectura

  • Las colecciones se leen por bloques ordenados por _id, de modo que un job que se detiene se reanuda tras el último _id que guardó. Cada bloque es una agregación con allowDiskUse.
  • Una colección cuyos valores de _id son de varios tipos BSON (por ejemplo ObjectIds y strings) se lee con un único cursor y empieza de nuevo si el job se detiene. El log del job dice que has _ids of several types.
  • Un where cuya primera etapa es una etapa de pipeline distinta de $match también lee la colección con un único cursor, porque esa etapa puede cambiar los documentos o su _id.

Rangos Paralelos y Estimación de Filas

  • Los rangos se cortan a partir de un $sample de los valores de _id. Las colecciones con _id de varios tipos no se dividen.
  • La estimación de filas es estimatedDocumentCount(), que se lee de los metadatos de la colección.

Carga

  • Los documentos se escriben con insertMany ordenado. La opción truncate borra los documentos con deleteMany; la opción drop elimina la colección.
  • Para reanudar una colección, el sink cuenta sus documentos con countDocuments. El sink MongoDB no cuenta los documentos de un rango de claves, así que cuando una colección se leyó por rangos y el recuento no indica qué lotes en curso se escribieron, la colección empieza de nuevo.

Parámetros Personalizados

El controlador MongoDB soporta parámetros personalizados adicionales que pueden especificarse en formato YAML para ajustar finamente el comportamiento de conexión, agrupamiento, configuraciones SSL y otras opciones avanzadas.

Parámetros de Conexión

# Configuración SSL/TLS
tls: true
tlsCAFile: /ruta/a/ca.pem
tlsCertificateKeyFile: /ruta/a/certificado-cliente.pem
tlsCertificateKeyFilePassword: contraseña_certificado
tlsAllowInvalidCertificates: false
tlsAllowInvalidHostnames: false
tlsInsecure: false

# Opciones de Autenticación
authMechanism: "SCRAM-SHA-256"  # o "SCRAM-SHA-1", "MONGODB-X509", "GSSAPI", "PLAIN"
authSource: "admin"
authMechanismProperties:
  SERVICE_NAME: "mongodb"
  CANONICALIZE_HOST_NAME: false

# Configuración de Tiempos de Espera
connectTimeoutMS: 30000
socketTimeoutMS: 360000
serverSelectionTimeoutMS: 30000
heartbeatFrequencyMS: 10000
maxIdleTimeMS: 30000

# Preferencias de Lectura
readPreference: "primary"  # o "primaryPreferred", "secondary", "secondaryPreferred", "nearest"
maxStalenessSeconds: 90

# Compresión
compressors: ["snappy", "zlib"]
zlibCompressionLevel: 6

Configuración de Agrupamiento

# Opciones de dimensionamiento de agrupamiento
maxPoolSize: 100
minPoolSize: 10
maxConnecting: 2

# Opciones de tiempo de espera de agrupamiento
maxIdleTimeMS: 30000
waitQueueTimeoutMS: 0

Ejemplos de Configuraciones

Configuración Básica

maxPoolSize: 50
serverSelectionTimeoutMS: 5000

Configuración SSL

tls: true
tlsCAFile: ${file:/ruta/a/ca-cert.pem}
tlsCertificateKeyFile: ${file:/ruta/a/certificado.pem}
tlsCertificateKeyFilePassword: contraseña_cert
authMechanism: "MONGODB-X509"

Configuración de Conjunto de Réplicas

host: rs1.ejemplo.com,rs2.ejemplo.com,rs3.ejemplo.com
port: 27017
database: base_de_datos_replicada
readPreference: "secondaryPreferred"
maxStalenessSeconds: 120
maxPoolSize: 25
minPoolSize: 5
compressors: ["snappy"]