Maldita memoria

La mayoría de las aplicaciones de data mining open source comparten un problema, la gestión de la memoria. Estoy seguro que a todos os ha dado alguna vez ese bonito error de Java Heap Space que tanto te alegra el día.

Por suerte KNIME tiene este elemento muy bien cuidado, y de hecho, ese fue uno de los motivos fundamentales por los que me decanté por KNIME Desktop como herramienta de cabecera. Sinembargo siempre hay algunas cosas a tener en cuenta para intentar mejorar el rendimiento.

Trabajar con bases de datos

KNIME está pensado para trabajar usando las capacidades de las bases de datos. Todos los nodos del grupo Database hacen trabajar a la base de datos en lugar de la aplicación. Así, si hacemos un Database Query o un Database Filter, la query en cuestión se ejecuta en la base de datos y la aplicación sólo toma los resultados. Trabajar con datos almacenados en base de datos es la mejor garantía para maximizar el rendimiento.

Nodos de base de datos de knime

Configurar los nodos

Por desgracia, no siempre tenemos la opción de trabajar con base de datos. Muchos clientes son bastante reacios a darnos acceso a su base de datos y es muy habitual que nuestro origen de datos sea un fichero plano.

Otra de las opciones de KNIME para la gestión de memoria es la de configurar nodo a nodo como queremos que se comporte esa gestión. Para ello en la configuración de cada nodo tenemos una pestaña “Memory Policy” que nos permite escoger como queremos hacer la gestión. Por defecto esta activada la de “Keep only small tables in memory”, normalmente esto funciona sin problemas y no hace falta modificarlo. Alternativamente se puede escoger la opción de “Write tables to disk” que forzará el nodo a trabajar con datos almacenados en el disco duro. En el otro extremo podemos usar la opción de “Keep all in memory” que pondrá todos los datos en RAM con el aumento de velocidad de cálculo (y de uso de memoria) consiguiente.

Memory Policy nodos knime

Memoria JAVA

Cómo todos los programas que corren sobre JAVA, otra opción para gestionar la memoria RAM es directamente aumentar el tamaño de memoria reservado.  Para ello hay que editar el fichero knime.ini situado en la raíz de la instalación y configurar el parámetro -Xmx.

Yo lo tengo a 1 Gb. -Xmx1G y no he tenido nunca problemas de falta de memoria. La tabla mas grande que he usado hasta el momento es de 2.400.000 registros (2.395.512 exactamente).

Hasta pronto!

Anuncios

Acerca de oriolcort

Business Analyst en DatKnoSys. Mi experiencia profesional empieza como desarrollador de algoritmos de data mining, paulatinamente pasé a consultor en data mining y business intelligence y actualmente me dedico al business y web analytics. He trabajado en KBS, Synera, Planeta Actimedia, TNS Media y actualmente en DatKnoSys Me interesa todo lo relacionado con el mundo del data mining y la estadística aplicada a negocio. Mi meta es ayudar a las empresas a mejorar usando técnicas de data mining de manera transparente.
Esta entrada fue publicada en Configuración, Trucos y etiquetada , , , . Guarda el enlace permanente.

2 respuestas a Maldita memoria

  1. Interesante entrada y interesante blog, a ver si entre todos podemos hacer ganar consciencia sobre el software llibre dentro del análisis de datos.

    Una pregunta ¿cuantas variables tenía la tabla de 2.4000.000?

    • oriolcort dijo:

      Pues gracias, lo actualizaré lo mas frecuentemente posible 🙂

      La tabla era de de ticket de compra así que inicialmente había 3 columnas: fecha, id_ticket, id_producto. Luego la pivotava y quedaban 720 columnas (una por producto).

      Saludos y bienvenido

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s