Postgres como base de datos NoSQL. Codemotion 2015
1. Postgres como base de
datos NoSQL
Rubén Gómez GarcíaMADRID· NOV 27-28 ·2015
2. MADRID· NOV 27-28 ·2015
Presentación
Rubén Gómez García
Formador desde 2011 en
Muchas disciplinase inquietudes
Sobre todo Devop!
@rubgomez
es.linkedin.com/in/rubgomez
3. MADRID· NOV 27-28 ·2015
Descripción del sistema de almacenamiento y
explotación de base de datos NoSQL
PostgreSQL
4. MADRID· NOV 27-28 ·2015
Sistema de almacenamiento NoSQL
Crecimiento masivo de bases dedatos NoSQL
Están “de moda” pero no seconocen sus beneficios
No pretenden sustituir a una base de datos relacional
Gran variedad de productos
5. MADRID· NOV 27-28 ·2015
Sistema de almacenamiento NoSQL
Gran popularidad de bases dedatos relacionales
Normalización
Escalado aceptable ($)
Persistencia avanzada
¿Pero, hasta donde podemos llegar con laescalabilidad?
6. MADRID· NOV 27-28 ·2015
Sistema de almacenamiento NoSQL
Problemas de bases de datos relacionales:
La complejidad de lasconsultas SQL
Rendimientos difícilesde mantener
JOINS!
7. MADRID· NOV 27-28 ·2015
Sistema de almacenamiento NoSQL
Necesitamos sistemas más versátiles, pero nada es gratis.
¿Esquema?
¿Escalabilidad?
¿Velocidad?
A cambio de qué!
8. MADRID· NOV 27-28 ·2015
Sistema de almacenamiento NoSQL
Que sacrificamos?
JOINS?
Esquemas?
Normalización?
Claves foráneas?
Validaciones?
Transacciones en basede datos?
9. MADRID· NOV 27-28 ·2015
Características NoSQL en PostgreSQL
PostgreSQL 9.4
10. MADRID· NOV 27-28 ·2015
NoSQL en PostgreSQL 9.4
PostgreSQL pretende no sacrificartotalmente lascaracterísticas
de una base de datos relacional.
Posee diversas soluciones
tipos de datos como HSTORE
Soporte para JSON
Soporte para JSONB (no BSON!)
11. MADRID· NOV 27-28 ·2015
HSTORE
Almacenamiento clave-valor en Postgres
No se trata de una tabla,sino de un tipo de dato!
12. MADRID· NOV 27-28 ·2015
HSTORE
Se trata deuna tabla hash almacenada PORCAMPO!
Podemos definir características para cada uno de los individuos.
14. MADRID· NOV 27-28 ·2015
HSTORE
Pero sieso lopuedo guardar igual en un campo de texto!
Ni siquiera podemos tratarlo como campo de texto!
Ni funciones ni operadores detexto!
Como puedo acceder a la información almacenada!
Preguntando…
15. MADRID· NOV 27-28 ·2015
HSTORE
Podemos preguntar a cualquier miembro de la tabla hash
Genial!
Pero… Si devuelve texto!
16. MADRID· NOV 27-28 ·2015
HSTORE
Efectivamente, devuelve texto, pero no sufras!
Ahora sí!
17. MADRID· NOV 27-28 ·2015
HSTORE
Soporte GIN yGIST para generación de índices en columnas
HSTORE.
Extremadamente eficiente.
Si disponemos de ello desde… PostgreSQL 8.4!
18. MADRID· NOV 27-28 ·2015
HSTORE
GiN o GIST! Depende
GIN es tres veces más rápido buscando.
GIN Tarda tres veces másen construirse
GIN es más lento en actualizaciones.
GIN ocupa entre dos ytres veces másque GIST
Regla general. Datos estáticos, GIN,Datos dinámicos GIST.
19. MADRID· NOV 27-28 ·2015
HSTORE
Que sería denosostros sin … “Operadores”:
21. MADRID· NOV 27-28 ·2015
JSON / JSONB
Ojo ,nada que ver con BSON (MongoDB)
JSON: Representación en texto
JSONB: Representación en binario
22. MADRID· NOV 27-28 ·2015
JSON
JavaScript Object Notation
Postgres posee soporte básico JSON desde haceaños.
Desde PostgreSQL 9.3sepermiten operadores con JSON que
permite acciones más avanzadas.
23. MADRID· NOV 27-28 ·2015
JSON
El almacenamiento en JSON permite validación dedocumentos.
Se suele mantener si senecesita el orden delas claves
24. MADRID· NOV 27-28 ·2015
JSON
El almacenamiento en JSON permite validación dedocumentos.
Se suele mantener si senecesita el orden delas claves
Su acceso es similaral HSTORE
25. MADRID· NOV 27-28 ·2015
JSONB
Almacenamiento de información JSON en formato binario.
Soporte en PostgreSQL 9.4
Formato compacto y eficiente.
Permite acceso avanzado y operadores de comparación
Permite GIN,GIST, hash y btree
26. MADRID· NOV 27-28 ·2015
JSONB
Tamaño reducido en disco
Muy inferior al tamaño JSON
Organizado como un diccionario (una tabla hash), cuyo acceso es
tremendamente rápido,sin embargo, el orden no es preservado.
JSONB es compatible con lasoperaciones JSON
27. MADRID· NOV 27-28 ·2015
JSONB
EL TRATO ES IGUAL, SIN EMBARGO, SE APRECIAN VISUALMENTE
DIFERENCIAS
28. MADRID· NOV 27-28 ·2015
JSONB
EL ORDEN NO ES RESPETADO.
SE GUARDA COMO UN DICCIONARIO
RÁPIDO
EFICIENTE
SOPORTE DE LAS MISMAS FUNCIONES QUE EL TIPO JSON!
NO ES BSON!
29. MADRID· NOV 27-28 ·2015
JSON/JSONB
Soporte de operadores
Específicos de JSONB
32. MADRID· NOV 27-28 ·2015
PostgreSQL vs MongoDB
Diferencias más interesantes:
Soporte para transacciones a nivel de basede datos.
MongoDB posee soporte detransacciones atómicas a nivel de
documento.
PostgreSQL posee soporte de transacciones a nivel de base de
datos (MVCC)
33. MADRID· NOV 27-28 ·2015
PostgreSQL vs MongoDB
Diferencias más interesantes:
JSONB VS BSON
SISTEMAS TOTALMENTE DISTINTOS.
BSON POSEE LIMITACIONES EN ALMACENAMIENTO DE PRECISIÓN
ALTA.
34. MADRID· NOV 27-28 ·2015
PostgreSQL vs MongoDB
Rendimiento: Carga yoperaciones
Using the NoSQLCapabilities in Postgres – EnterpriseDB Whitepaper
35. MADRID· NOV 27-28 ·2015
PostgreSQL vs MongoDB
Rendimiento: Gráfico
Using the NoSQLCapabilities in Postgres – EnterpriseDB Whitepaper
36. MADRID· NOV 27-28 ·2015
PostgreSQL vs MongoDB
Otras consideraciones.
MongoDB posee unas características muy interesantes en
concepto de sharding y réplica:
Son sencillos de creary demodificar.
Postgres posee “artificios” para obtenerlos
No son tan sencillos como MongoDB
37. MADRID· NOV 27-28 ·2015
PostgreSQL vs MongoDB
Lasversiones superiores de MongoDB poseen nuevos sistemas de
gestión de almacenamiento como WiredTiger o el MMAP, que
solucionan losproblemas debloqueos en versiones 2.6 o
inferiores.
Aumenta el rendimiento!
MongoDb siguesin ser una basede datos de crecimiento lineal.
Problemas con consultas que afecten a más deuna colección.
Soporte de MapReduce retirado!
39. MADRID· NOV 27-28 ·2015
TORODB
BASE DE DATOS DE SOFTWARE LIBRE EJECUTADA SOBRE
POSTGRESQL
PROYECTO ESPAÑOL!
ALMACENAMIENTO JSON RELACIONAL, NO EN JSONB (I/O
REDUCIDA)
COMPATIBILIDAD CON PROTOCOLOPROPIETARIO MONGODB
40. MADRID· NOV 27-28 ·2015
TORODB
EVITA EL ALMACENAMIENTO DE METAINFORMACIÓN REPETIDA
SOPORTE DE TRANSACCIONES
ACTUALIZACIONES SOBREDOCUMENTOS JSON
LICENCIA AGPLv3
DESARROLLADO EN JAVA
CODIGO FUENTE EN GITHUB
41. MADRID· NOV 27-28 ·2015
TORODB
MÁS QUE UN CONECTOR DE POSTGRESQL
ALTA CONCURRENCIA Y RENDIMIENTO
PERMITE REALIZAR UN CAMBIO APOSTGRES TRANSPARENTE.
OPERACIONES JSON COMPATIBLES DE MONGODB.
42. MADRID· NOV 27-28 ·2015
TORODB
SE ENCUENTRA EN :
github.com/torodb
LANZADO EN 2014 COMO DEVELOPER PREVIEW
SOPORTE CRUD Y CASI TODO EL API DE SELECT.
TODAVÍA NO TENEMOS UNAVERSIÓN 1.0
ESTAMOS EN LAVERSIÓN 0.23
44. MADRID· NOV 27-28 ·2015
TORODB
EJECUTAR EL JAR DEL PROYECTO
CONECTAR ALASHELL CON EL CLIENTE MONGO
45. MADRID· NOV 27-28 ·2015
TORODB
PROYECTO PROMETEDOR
SIEMPRE SE NECESITA COLABORACIÓN!
CÓDIGO TOTALMENTE DISPONIBLE EN GITHUB
SERÁ INTERESANTE COMPROBAR LOSRENDIMIENTOS EN SU
VERSIÓN 1.0!