PostgreSQL es la base de datos todo terreno, es la más usada después de MySQL.
Si no sabes que es una base de datos lo puedes ver aquí.
¿Qué te da esta base de datos?
- Guardar los datos de forma estructurada
- Guardar los datos de forma desestructurada
- Escala verticalmente
- Escalar horizontalmente (mediante plugin)
- Particionamiento total de tablas (incluyendo índices)
- No te va a fallar (30 años de uso que indican que no te va a fallar)
Esta base de datos es un estándar a la hora de desarrollar aplicaciones, ya sea por su largo desarrollo y por ello alta compatibilidad con muchas librerías de todos los lenguajes que existen. Lleva más de 30 años en funcionamiento.
Su lenguaje es SQL, así se crearía una tabla.
CREATE TABLE usuarios (
id serial PRIMARY KEY,
nombre text,
datos_extra jsonb
);
¿Por qué se le dice a esta base de datos que es todo terreno?
Porque te permite crear tus propios tipos de datos para los casos en los que tu estructura de datos sea muy compleja.
Por ejemplo si queremos crear un tipo de dato que tenga las métricas de un modelo podríamos crear un tipo de dato como este:
CREATE TYPE metricas_modelo AS (
precision_val NUMERIC(5,4), -- Ejemplo: 0.9500
recall_val NUMERIC(5,4),
f1_score NUMERIC(5,4)
);
Y luego usarlo así a la hora de crear una tabla
CREATE TABLE registro_experimentos (
id SERIAL PRIMARY KEY,
nombre_modelo TEXT,
estado estado_entrenamiento DEFAULT 'iniciado', -- Usamos el ENUM
resultados metricas_modelo -- Usamos el COMPUESTO
);
Para insertar los datos seria así
INSERT INTO registro_experimentos (nombre_modelo, estado, resultados)
VALUES
('Red Neuronal V1', 'finalizado', ROW(0.8, 0.7, 0.75)),
('Arbol Decision', 'finalizado', (0.9, 0.85, 0.88)),
('Regresion Lineal', 'fallido', NULL);
Y por ultimo para hacer las consultas se podría hacer así
SELECT nombre_modelo, (resultados).precision_val
FROM registro_experimentos
WHERE (resultados).f1_score > 0.8;
Gracias a esta conjunto de datos, nos permiten crear datos con n numero de variables sin tener que que expandir enormemente la tabla de la base de datos.
Si lo que necesitas es flexibilidad esta base de datos también te la puede dar, con el campo JSON o JSONB.
Este tipo de campo te permite guardar un Json directamente en la base de datos y incluso te permite hacer búsquedas por el contenido de los mismos (en cuyo caso deberías usar JSONB), esto es muy útil cuando la aplicación esta en expansión, ya que no nos obliga a estar cambiando la tabla continuamente.
¿Cual es la diferencia entre JSON y JSONB dices?
La diferencia es que una se almacena en texto plano en el disco (JSON) mientras que la otra se almacena en binario (JSONB), cada una tiene sus ventajas y sus desventajas.
JSON ventajas
- Viene muy bien cuando quieres simplemente almacenar un JSON, ya que no tienes que serializar ni deserializar.
JSOB ventajas
- Te es más optimo si quieres hacer consultas sobre un campo que esta en el Json.
- Ocupa menos en disco.
- Te permite crear índices sobre los Json para que sea aún más rápido.
Ejemplos próximamente
Bibliografía