UNAM · Facultad de Ingeniería Arquitecturas Cliente-Servidor

Lleva tu base de datos relacional
directo a la línea de comandos

PumaDB Engine es un DBMS multiproceso en lenguaje C puro con sockets POSIX TCP/IP, exclusión mutua mediante flock() y persistencia en disco sobre archivos planos.

$ git clone https://github.com/rogerich/pumadb-engine.git && make && ./bin/servidor 8080
Prueba los comandos con un clic:
⚡ pumadb-cli — 127.0.0.1:8080 — bash — 80x24
Conectado TCP
>

Arquitectura Cliente-Servidor de Alto Nivel

Construido desde cero para cumplir estrictamente con los estándares de sistemas POSIX para Linux.

🔀

Concurrencia con fork()

El servidor multiproceso delega cada conexión entrante a un proceso hijo independiente, garantizando aislamiento de memoria y cero interferencia entre clientes simultáneos.

Manejador SIGCHLD recolector de zombies
🔒

Persistencia con flock()

Lecturas paralelas seguras con LOCK_SH y escrituras exclusivas con LOCK_EX. Las operaciones de modificación utilizan reemplazo atómico con rename().

Exclusión mutua a nivel de kernel
🌐

Sockets POSIX TCP/IP

Comunicación full-duplex sobre el protocolo de transporte TCP con control de flujo garantizado, enmarcamiento de mensajes y saneamiento de buffers en utils.c.

Transmisión robusta sobre IPv4
🛡️

Llave Primaria Inmutable

Autoincremento garantizado mediante escaneo max(Id) + 1. Se rechaza a nivel de parser cualquier intento de mutación sobre la columna Id mediante UPDATE.

Integridad referencial y unicidad
💻

Banner ASCII & Interfaz ANSI

Banner estético calibrado a 60 columnas que combina el puma emblemático en arte ASCII y el logotipo de PumaDB en colores dorados y cian de la UNAM.

Estilo inspirado en modernas dev-tools
📂

Almacenamiento en Texto Plano

Persistencia transparente sobre archivos CSV (alumno.txt) con encabezado estricto, facilitando inspección directa, auditorías y pruebas automatizadas.

Sin motores externos de base de datos

PumaDB Engine en Acción

Capturas de pantalla tomadas directamente de terminales Linux durante la ejecución concurrente.

Captura de terminal del Cliente PumaDB
🔍 Ampliar Captura
Terminal 1 · Frontend

Cliente Interactivo (REPL)

Banner visual con logotipo Puma y procesamiento de sentencias SQL interactivas con prompt >.

Captura de terminal del Servidor Daemon PumaDB
🔍 Ampliar Captura
Terminal 2 · Backend Daemon

Servidor Concurrente

Daemon TCP escuchando en puerto 8080, despachando procesos hijos concurrentes y registrando transacciones.

Comandos SQL Soportados

Sintaxis formal implementada en el parser sintáctico de PumaDB Engine.

Comando Sintaxis de Ejemplo Tipo de Bloqueo Comportamiento en la Base de Datos
SELECT SELECT * FROM Alumno flock(LOCK_SH) Lee y retorna todos los registros de la tabla de forma concurrente sin bloquear otras lecturas.
INSERT INSERT INTO Alumno VALUES (Nombre,Apellido,Semestre,Carrera) flock(LOCK_EX) Calcula el siguiente Id autoincremental (max(Id) + 1) y anexa el registro atómicamente.
UPDATE UPDATE Alumno SET Columna=NuevoValor WHERE Id=X flock(LOCK_EX) + rename() Modifica la columna indicada en el registro con Id=X. La columna Id no se puede alterar.
DELETE DELETE FROM Alumno WHERE Id=X flock(LOCK_EX) + rename() Elimina de forma permanente el registro identificado por Id=X reescribiendo el archivo temporal.
SALIR SALIR N/A Cierra ordenadamente el socket TCP del cliente y libera los recursos asociados en el servidor.

Documentación Técnica Especializada

Consulta el análisis de requerimientos, diagramas de flujo de red TCP, guías de concurrencia y glosario de términos del proyecto.