Controladores

Controlador SQLite

Esta documentación explica la implementación del controlador SQLite 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
Ruta de la Base de Datosdb en la configuración de sqliteLa ruta del archivo a la base de datos SQLiteSíNinguno (debe ser especificado)

Detalles Técnicos

La implementación del controlador SQLite utiliza la biblioteca Node.js sqlite3 con funcionalidad de envoltura asíncrona personalizada para las conexiones SQLite.

Aspectos técnicos clave:

  • La conexión se realiza directamente a una ruta de archivo en lugar de a una base de datos en red
  • Utiliza sentencias PRAGMA para la extracción de metadatos (table_info, foreign_key_list)
  • La extracción de esquemas incluye nombres de tablas, información de columnas y tipos de datos
  • La generación de DDL utiliza el campo sql de la tabla sqlite_master
  • Las relaciones de clave foránea se detectan consultando PRAGMA foreign_key_list
  • No se requiere autenticación para los archivos SQLite (acceso al sistema de archivos)
  • Utiliza clases de envoltura asíncronas para proporcionar una interfaz basada en Promesas a sqlite3

Proceso de Conexión

Las conexiones SQLite se realizan utilizando una ruta de archivo:

  1. El controlador toma como entrada una ruta de archivo de base de datos
  2. Abre el archivo de base de datos SQLite utilizando la biblioteca sqlite3
  3. El agrupamiento de conexiones no es aplicable ya que SQLite utiliza bloqueo a nivel de archivo

Opciones de Autenticación

Tipo de AutenticaciónMapeo UIDescripción
NingunaÚnica opción disponibleNo se necesita autenticación para los archivos SQLite

Nota: El controlador SQLite no requiere autenticación ya que trabaja directamente con archivos en el sistema de archivos.

Endpoints de API Utilizados

Las conexiones SQLite se utilizan principalmente en:

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

Dependencia de Controlador Node.js

El controlador SQLite depende de la biblioteca Node.js sqlite3:

  • Biblioteca: sqlite3
  • Propósito: Conectarse a archivos de base de datos SQLite
  • Características: Acceso a bases de datos basado en archivos, soporte PRAGMA, sentencias preparadas

Tablas Grandes y Reanudación

Esta sección trata SQLite como origen. 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.

  • Las tablas se leen por bloques ordenados por el rowid, de modo que un job que se detiene se reanuda tras el último rowid que guardó. Una columna INTEGER PRIMARY KEY es el propio rowid y se usa por su nombre.
  • Una tabla cuyos nombres de rowid (rowid, _rowid_ y oid) están todos ocupados por columnas se lee con un único cursor y empieza de nuevo si el job se detiene.
  • Las tablas WITHOUT ROWID se leen por su clave primaria cuando todas sus columnas son enteras o de texto, y con un único cursor si no.
  • Los rangos se cortan a partes iguales entre el rowid mínimo y el máximo, o los de una clave primaria de una única columna entera.
  • No hay estimación de filas en vivo: el número de filas contado al escanear el modelo decide cuántos rangos se cortan.

Leer Consulta y Escritura

Como tap, SQLite ejecuta la Leer consulta de una entidad, envuelta como subconsulta para que se le aplique el Límite.

Como sink, SQLite admite todas las opciones de carga de la regla:

Opción de cargaQué pasa con la tabla
TruncarSe borran sus filas antes de la carga. Si la tabla no existe, se crea
DropSe borra y se vuelve a crear
AñadirSe añaden las filas. Si la tabla no existe, se crea
ActualizarSe actualizan las filas con la misma clave primaria
CombinarSe actualizan las filas con la misma clave primaria y se insertan las nuevas
  • Una tabla que viene de otra base de datos SQLite se crea con su propio DDL. Una de cualquier otra base de datos se crea a partir de sus campos, con su clave primaria.
  • Actualizar y Combinar necesitan una clave primaria. Los registros sin valor en una columna de la clave se omiten, con un aviso en el log del job.
  • Sólo se escriben las columnas que tiene la tabla.
  • Las fechas se escriben como texto ISO 8601, los booleanos como 1 / 0, y los objetos y arrays como texto JSON.

Parámetros Personalizados

El controlador SQLite soporta parámetros personalizados adicionales que pueden especificarse en formato YAML para ajustar finamente el comportamiento y las opciones de rendimiento de la conexión a la base de datos.

Parámetros de Conexión a la Base de Datos

# Parámetro básico de conexión
path: "/ruta/a/la/base/de/datos.db"

# Banderas de Modo de Conexión
mode:
  - OPEN_READWRITE  # Abrir base de datos en modo lectura-escritura
  - OPEN_CREATE     # Crear base de datos si no existe
  - OPEN_READONLY   # Abrir base de datos en modo solo lectura

# Opciones de Comportamiento de la Base de Datos
timeout: 5000  # Tiempo de espera de consulta en milisegundos
retry: 3       # Número de intentos de reintento para base de datos bloqueada

Parámetros de Rendimiento y Optimización

# Configuración de Caché
cacheSize: 2000   # Número de páginas a cachear (negativo = KB, positivo = páginas)
pageSize: 4096   # Tamaño de página en bytes para la base de datos

# Modo Sincrónico
synchronous: "NORMAL"  # Opciones: OFF, NORMAL, FULL, EXTRA

# Modo Diario
journalMode: "WAL"  # Opciones: DELETE, TRUNCATE, PERSIST, WAL, MEMORY, OFF

# Modo de Bloqueo
lockingMode: "NORMAL"  # Opciones: NORMAL, EXCLUSIVE

# Modo de Transacción
transactionMode: "IMMEDIATE"  # Opciones: DEFERRED, IMMEDIATE, EXCLUSIVE

Parámetros de Seguridad

La configuración de seguridad para SQLite se maneja principalmente a través del sistema de archivos del sistema operativo, ya que SQLite no tiene un mecanismo de autenticación integrado. Las configuraciones relevantes se centran en la validación de conexiones y manejo de archivos.