Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

Usando bases de datos nosql – mongodb

Gustavo Fernández
Gustavo Fernández

Llevaba ya algún tiempo queriendo hacer algunas pruebas de una base
de datos nosql
, desde dos puntos de vista:

  • Modelo de desarrollo
  • Rendimiento

Después de leer algunos
artículos he seleccionado la siguiente, «mongodb», ya que me
parece que está muy avanzada desde el punto de vista del
desarrollador. Es decir admite un lenguaje de query bastante amplio y
en vez de usar un modelo de acceso basado en REST, como
por ejemplo couchdb, usa drivers nativos para los distintos
lenguajes. No he realizado pruebas de rendimiento, propiamente dichas,
así que no he seleccionado mongobd por que sea más o menos rápida que
otras. La idea de esta prueba es ver que se puede hacer con una base
de datos nosql más que analizar cual da más o menos rendimiento

Una vez seleccionado un motor el ejercicio que me he planteado
es el siguiente

crear una aplicación web que permita realizar búsquedas sobre
una conjunto de trazas de una servidor.
Dispongo de
un fichero de texto con medio millón de lineas, cada
linea representa un acceso a una método de una aplicación y cada linea
tiene al menos:

  • Id de la linea, un string
  • Operación que se invoca, un string
  • Duración de la misma, un long
  • La hora a la que se realizó, un date
  • Estatus de la petición, un integer
  • Cabeceras de la petición, pude tener más de una,  list
  • Cabeceras de la respuesta, pude tener más de una, list

Lo primero que he hecho ha sido instalar
el motor de base de datos, aptitude install mongo…. sencillo.

Lo segundo es crear el modelo que representa los
objetos que voy a utilizar, en este caso TrazaItem,
ResponseHeader y RequestHeader
. Cada uno de estos tres
elementos estará representado por un bean de java.

Usando bases de datos nosql - mongodb

Lo tercero es crear una mapeador que me transforme
las lineas del fichero en objetos TrazaItem

Usando bases de datos nosql - mongodb

Una vez hecho esto se puede volcar la información en la
colección de mongodb
. Tarda unos 4 minutos
en procesar el medio millon de registros e
insertarlos en la colección.

Como cuarto paso vamos a crear un servlet, un
jsp y una clase de búsqueda
. En el servlet recogeremos los
valores de los filtros y en la clase de búsqueda procesaremos la
información para mostrarla en el jsp

Usando bases de datos nosql - mongodb

Una vez desplegada la aplicación en el tomcat podemos ver
que el modelo es realmente rápido y muy flexible
. Todas las
peticiones tardan menos de 1,5 segundos en procesarse con
ordenaciones, filtrados etc…

Por tanto las conclusiones rápidas, que no
tiene porque ser acertadas
ya que se han invertido unas 10
horas en hacer todas las tareas, son:

  • Si el modelo de backend de tu aplicación es un modelo
    desnormalizado, las bases de datos NOSQL puede ser de gran ayuda
  • Si el modelo a representar es jerárquico, las bases de datos
    NOSQL pueden ser interesantes
  • Mongobd
    permite hacer queries sobre los objetos internos de la colección
  • Mongodb + una librería de JSON, como flexjson permiten un
    mapeo eficiente de los objetos almacenados en la base de datos NOSQL
    agilizando el desarrollo.
  • Mongodb permite realizar ordenaciones, counts, limits de manera
    nativa y permite usar MAP/REDUCE para
    hacer agrupaciones, por ejemplo.
  • Si tu modelo es de tipo E-R este tipo de bases de datos no son
    interesantes porque tendrás que implementar las relaciones
  • Los siguientes ejemplos/patrones hay que
    tenerlos en cuenta a la hora de decidir si se usa o no, una base de
    datos de este tipo.
  • Supongo que cualquier otra base de datos NOSQL ofrecerá
    características similares a la analizada en este caso.
  • Faltaría analizar el rendimiento del MAP/REDUCE, como crear
    índices etc.. de este y otros motores.
  • Exiten una gran variedad de productos que
    ofrecen caracaterísticas similares y no tengo claras las diferencias
    entre los mismos.

A continuación una imagen de como ha quedado la aplicación ….

Usando bases de datos nosql - mongodb

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *