ToroDB Hackathon - Barcelona JUG 2015

17
ToroDB Hack-a-thon! :) Gonzalo Ortiz <gortiz@torodb.com> Álvaro Hernández <[email protected]>

Transcript of ToroDB Hackathon - Barcelona JUG 2015

Page 1: ToroDB Hackathon - Barcelona JUG 2015

ToroDBHack-a-thon! :)

Gonzalo Ortiz <[email protected]>Álvaro Hernández <[email protected]>

Page 2: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

EJERCICIO “OBLIGATORIO”

Page 3: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Instalación ToroDB y puesta en marcha

● Instalar PostgreSQL 9.4. Crear un usuario y ajustar contraseña. Revisar pg_hba.conf (si es necesario)

● Clonar y construir con maven https://github.com/8kdata/mongowp

● Clonar y construir con maven https://github.com/torodb/torodb

Page 4: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Instalación ToroDB y puesta en marcha

● Ejecutar java -jar torodb.jar –help y revisar opciones de arranque

● Crear base de datos vacía en PostgreSQL

● Lanzar ToroDB y jugar con la consola de Mongo. Mirar las tablas generadas

Page 5: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

HACKS VARIOS(a elegir 1 ó más, según gustos)

Page 6: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Monitorización JMX

● Incorporar soporte de JMX en ToroDB, para poder monitorizar métricas desde jvisualvm y clientes JMX

● Monitorizar:➔ Tamaño de la cola general (leyendo estimación del ejecutor)

➔ Tamaño medio/varianz. colas sesiones➔ Número de sesiones

Page 7: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Demostrar “tainted reads” de Mongo

● Crear un programa Java cliente, con el driver y API de MongoDB (3.0)

● Usar primitivas de sincronización / programación concurrente para provocar inserción de documentos / actualización de documentos ya leídos de manera concurrente a una lectura larga de una query

Page 8: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Demostrar “tainted reads” de Mongo

● Puede ser necesario hacer un update que modifique el documento de manera notable (añadiendo muchos campos) y así volverá a aparecer en el resultset, al final

● Comprobar que en MongoDB el efecto se produce y en ToroDB NO

Page 9: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Arreglar mongoimport 3.0 en ToroDB

● mongoimport v3.0 no funciona con ToroDB, porque falta algún comando del protocolo por implementar

● Estudiar con wireshark o tcpdump el/los comando/s que falta/n

● Implementarlos en mongowp y torodb

Page 10: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Usar mongowp para crear un loggging proxy

● wireshark o tcpdump ayudan para estudiar el protocolo de Mongo, pero un proxy que loguee todas las peticiones del cliente es mucho mejor

● A un nivel básico, es algo muy sencillo de realizar gracias a mongowp

● Usa tu librería de logging favorita :)

Page 11: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Quitar el prefijo “col_” en los schemas de Toro

● Cuando en MongoDB generas una colección, ToroDB crea un SCHEMA SQL con igual nombre

● Pero con el prefijo “col_” y todas las tablas usan dicho SCHEMA

● Quitarlo parece fácil pero tiene algunas dificultades. ¡A por ello!

Page 12: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Probar el driver pgjdbc-ng en ToroDB

● ToroDB usa el driver “oficial” de PostgreSQL de JDBC

● Existe un driver alternativo, que usa el protocolo binario de PostgreSQL

● Probarlo en ToroDB puede ser tan simple como cambiar la dependencia maven y la URL.... o no ;)

Page 13: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Crear un microbenchmark de Mongo con jmh

● jmh es un pequeño framework de benchmarking, orientado a microbenchmarks, incluido en la distribución de Java de Oracle

● Facilita crear benchmarks incluso con varios threads

● Crear un benchmark de Mongo/Toro

Page 14: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Crear un benchmark de latenciacon hdrhistogram

● En bases de datos la latencia es en ocasiones más importante que las operaciones/s o el throughput

● hdrhistogram es un framework excelente para medirlo

● Crear una app cliente que mida la latencia de operaciones y las imprima

Page 15: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Medir latencia operaciones en ToroDBcon hdrhistogram. Exportar via JMX

● Modificar ToroDB para que use internamente hdrhistogram para grabar estadísticas de latencia de tiempo de servicio de peticiones

● Imprimirlas periódicamente por consola

● (Mucho mejor) exportarlas vía JMX

Page 16: ToroDB Hackathon - Barcelona JUG 2015

ToroDB @NoSQLonSQL

Medir el rendimiento de ToroDB conNewRelic

● NewRelic permite medir el rendimiento y analizar el mismo para aplicaciones Java

● En aplicaciones web no hay que hacer configuración especial

● En aplicaciones standalone es necesario definir en XML qué medir

Page 17: ToroDB Hackathon - Barcelona JUG 2015