sábado, 19 de marzo de 2011

(Injusta) comparación de OpenStack Object Storage y MongoDB

Aclaración: antes que nada, quiero aclarar que no es justo para MongoDB compararlo con Object Storage. Mi intención es sólo comentar mi experiencia.


Ante la necesidad de guardar una gran cantidad de archivos en una aplicación web (más de 80GB), realicé pruebas con MongoDB (versiones 1.6.5 y 1.7.3), ya que entre las bases de datos NoSql, es la única que encontré que provee el API necesario para guardar y obtener  archivos almacenados (GridFS) (además permite ser configurado muy fácilmente para que los datos almacenados se repliquen entre distintas instancias de MongoDB). Pero me encontré con 2 problemas:
  1. Poca eficiencia en la utilización del espacio en disco: en las pruebas realizadas, al insertar archivos por un total de 12GB, en disco se utilizó 21GB.
  2. Dificultad para recuperar el espacio ocupado de archivos borrados: el borrado de los archivos es un "borrado lógico", y para recuperar el espacio que utilizan, hace falta ejecutar "repairdb()", que básicamente, hace una copia de la BD, de todos los datos no-borrados... esto es un problema si la base de datos es más grande que el espacio libre de la partición.
Este tipo de problemas los pude superar usando OpenStack Object Storage (versión 1.2.0):
  1. Utilización de espacio en disco: al insertar archivos por 4202MB, en disco se utilizó 4281MB.
  2. Recuperación de espacio en disco: el espacio es liberado al borrar los archivos.
En cuanto a las pruebas de stress:
  • MongoDB en ningún caso dió error
  • al realizar pruebas con Object Storage, he obtenido algunos "Read timed out" al momento de subir los archivos.
Cabe aclarar que MongoDB lo corria directamente en mi computadora, en cambio, Object Storage estaba instalado en una guest KVM.

En cuanto a la instalación:
  • la instalación de MongoDB me llevó muy poco tiempo y es muy fácil
  • la de Object Storage me costó más, sobre todo la utilización desde Java, ya que el cliente de Java necesita validar correctamente los certificados SSL con los que se configuró el servidor (algo que no pasa con el cliente Python).

No hay comentarios: