ToroDB Hackathon - Barcelona JUG 2015
-
Upload
8kdata-technology -
Category
Software
-
view
96 -
download
3
Transcript of ToroDB Hackathon - Barcelona JUG 2015
ToroDBHack-a-thon! :)
Gonzalo Ortiz <[email protected]>Álvaro Hernández <[email protected]>
ToroDB @NoSQLonSQL
EJERCICIO “OBLIGATORIO”
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
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
ToroDB @NoSQLonSQL
HACKS VARIOS(a elegir 1 ó más, según gustos)
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
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
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
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
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 :)
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!
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 ;)
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
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
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
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