¿Qué es SQLite?
SQLite es un motor de base de datos SQL transaccional, autocontenido, sin servidor y de configuración cero incrustado en una única biblioteca C. Creado por D. Richard Hipp en 2000 y lanzado al dominio público, SQLite es posiblemente el motor de base de datos más ampliamente desplegado en el mundo — incrustado en miles de millones de dispositivos incluyendo cada iPhone, cada teléfono Android, cada instalación de macOS, la mayoría de los navegadores web e innumerables sistemas integrados.
SQLite almacena toda su base de datos — definiciones de esquema, tablas de datos, índices y registros de transacciones — en un único archivo ordinario en el sistema de archivos host. No hay proceso de servidor separado, sin configuración, sin administración y sin conexión de red requerida.
Formato del archivo SQLite
El formato de archivo de base de datos SQLite está precisamente especificado y es estable. Los archivos usan extensiones .db, .sqlite o .sqlite3 (todas idénticas, solo convenciones de nomenclatura).
Estructura de páginas
El archivo SQLite está organizado como una secuencia de páginas de tamaño fijo. El tamaño de página predeterminado es de 4096 bytes (4 KB).
Archivo de base de datos SQLite
├── Página 1 (Cabecera + primera página raíz B-tree)
│ ├── Cabecera (primeros 100 bytes)
│ │ ├── Cadena mágica: "SQLite format 3\000" (16 bytes)
│ │ ├── Tamaño de página en bytes
│ │ ├── Cookie de esquema (incrementado en cada cambio de esquema)
│ │ ├── Codificación de texto (1=UTF-8, 2=UTF-16le)
│ │ └── ID de aplicación
│ └── Página raíz de la tabla sqlite_schema
│
└── Páginas 2 a N (páginas B-tree, páginas de desbordamiento, páginas de lista libre)
Organización B-tree
SQLite usa una estructura de datos B-tree (árbol equilibrado) para todo el almacenamiento de datos:
- B-trees de tabla almacenan filas indexadas por el ID de fila de 64 bits
- B-trees de índice almacenan claves de índice junto con los IDs de fila a los que apuntan
Tipos de datos SQLite
SQLite usa tipado dinámico — los tipos de columna son sugerencias en lugar de restricciones estrictas. SQLite reconoce cinco "clases de almacenamiento":
| Clase de almacenamiento | Descripción |
|---|---|
| NULL | Valor nulo |
| INTEGER | Entero con signo, 1-8 bytes |
| REAL | Punto flotante IEEE de 8 bytes |
| TEXT | Cadena UTF-8 o UTF-16 |
| BLOB | Datos binarios, almacenados exactamente como se proporcionan |
Modo WAL (Write-Ahead Logging)
SQLite soporta dos modos de registro:
Modo Delete (Predeterminado)
- Antes de modificar una página, copia la página original a un archivo de journal de reversión (-journal)
- Modifica la página en el archivo de base de datos
- Después del commit, elimina el archivo de journal
Los lectores bloquean a los escritores; el escritor bloquea a los lectores. Un escritor a la vez.
Modo WAL
- Los escritores añaden nuevas versiones de páginas modificadas al archivo WAL (-wal) sin tocar el archivo de base de datos
- Los lectores leen páginas del archivo WAL si tienen versiones más nuevas, de lo contrario del archivo de base de datos
- Un punto de control escribe periódicamente las páginas WAL de vuelta al archivo de base de datos principal
El modo WAL permite lectores concurrentes y un escritor simultáneamente — una gran ventaja de rendimiento. Se activa con:
PRAGMA journal_mode=WAL;
SQLite en la práctica
Cuándo usar SQLite
- Apps móviles — tanto iOS como Android tienen SQLite integrado
- Apps de escritorio — configuración local, datos de usuario, estado de la aplicación
- Sistemas integrados — dispositivos IoT, electrodomésticos inteligentes, sistemas automotrices
- Testing — intercambia PostgreSQL/MySQL por SQLite en pruebas sin Docker
- Sitios web pequeños a medianos — hasta unos cientos de GBs de datos, escrituras concurrentes moderadas
Cuándo NO usar SQLite
- Escrituras de alta concurrencia — SQLite permite solo un escritor a la vez
- Bases de datos muy grandes — el rendimiento se degrada para escrituras más allá de decenas de GBs
- Acceso de red — SQLite no tiene protocolo de red; es una biblioteca, no un servidor
- Múltiples máquinas — no se puede ejecutar SQLite en un clúster
Herramientas comunes de SQLite
| Herramienta | Tipo | Descripción |
|---|---|---|
| sqlite3 | CLI | Herramienta de línea de comandos integrada |
| DB Browser for SQLite | GUI | Visor/editor de escritorio gratuito |
| DBeaver | GUI | Múltiples bases de datos; soporta SQLite |
| Datasette | Web | Navegar/publicar SQLite como API REST |
Inspección de archivos SQLite
# Abrir un archivo SQLite en la CLI
sqlite3 base_de_datos.sqlite
# Listar todas las tablas
.tables
# Mostrar esquema para una tabla
.schema nombre_tabla
# Ejecutar una consulta
SELECT count(*) FROM nombre_tabla;
# Verificar la integridad del archivo
PRAGMA integrity_check;
SQLite vs. otras bases de datos
| Característica | SQLite | PostgreSQL | MySQL |
|---|---|---|---|
| Despliegue | Archivo (incrustado) | Proceso servidor | Proceso servidor |
| Configuración | Cero config | Compleja | Compleja |
| Escrituras concurrentes | Limitadas | Excelentes | Buenas |
| Tamaño máx. de base de datos | 281 TB | Ilimitado | 64 TB |
| Acceso de red | ❌ | ✅ | ✅ |
Conversiones relacionadas
Conversiones frecuentes del catálogo: