Problema con Java y Mysql a traves de tunel ssh
Publicado por karkoma (2 intervenciones) el 16/11/2009 20:48:40
Hola:
Estoy terminando un programa en java que contiene una base de datos para una empresa. El programa crea un tunel ssh. A traves de este tunel se conecta a una base de datos Mysql remota, abriendo un pool de conexiones (el commons-dbcp de apache) y puede hacer las consultas e inserciones de manera segura y encriptada.
Bien todo esto funciona bien ya sea en el propio servidor o en la misma red local. El problema me viene cuando me intento conectar desde fuera. También funciona pero muy lento. Al principio pensé que era por el ancho de banda, pero analizando el trafico, vi que solo usaba sobre un 10% del disponible, y a veces ni eso.
Después de buscar mucho por google, creiendo que el problema estaba en el tunel, se me ocurrió analizar el trafico con el wireshark. Bien, mi sorpresa fue que para obtener los datos preguntaba al servidor por la primera fila, esperaba a que llegara, la almacenaba, y volvía a repetir, así hasta llenar la tabla. Este era el problema, dentro de la red el tiempo de latencia es despreciable, pero en Internet, para llegar a mi servidor, el tiempo de latencia esta sobre 100 - 200 ms, y no es para nada despreciable.
Para llenar la tablas utilizo el único método que encontrado que es preguntar por la primera fila, guardar en un modelo de tabla, preguntar por la segunda, y así sucesivamente hasta llenar la tabla que quiero consultar.
Si sirve de algo, utilizo una combinación de estos dos manuales que encontré por la red:
http://www.chuidiang.com/java/mysql/BasicDataSource-Pool-Conexiones.php
http://www.chuidiang.com/java/mysql/mysql-java-basico.php
He mirado los tiempos, y la primera consulta tarda sobre 6 segundos, por que tiene que establecer la conexión (lo cual no me preocupa demasiado por que solo es la primera, es soportable), pero las otras consulta tardan sobre unos 1 - 2 segundos y con tablas de 15 registros como mucho. No quiero pensar que pasara cuando crezca la aplicación.
Por favor, pido si alguien sabe si hay alguna otra forma, o si se puede preguntar por varias filas a la vez, o alguna otra solución.
Estoy terminando un programa en java que contiene una base de datos para una empresa. El programa crea un tunel ssh. A traves de este tunel se conecta a una base de datos Mysql remota, abriendo un pool de conexiones (el commons-dbcp de apache) y puede hacer las consultas e inserciones de manera segura y encriptada.
Bien todo esto funciona bien ya sea en el propio servidor o en la misma red local. El problema me viene cuando me intento conectar desde fuera. También funciona pero muy lento. Al principio pensé que era por el ancho de banda, pero analizando el trafico, vi que solo usaba sobre un 10% del disponible, y a veces ni eso.
Después de buscar mucho por google, creiendo que el problema estaba en el tunel, se me ocurrió analizar el trafico con el wireshark. Bien, mi sorpresa fue que para obtener los datos preguntaba al servidor por la primera fila, esperaba a que llegara, la almacenaba, y volvía a repetir, así hasta llenar la tabla. Este era el problema, dentro de la red el tiempo de latencia es despreciable, pero en Internet, para llegar a mi servidor, el tiempo de latencia esta sobre 100 - 200 ms, y no es para nada despreciable.
Para llenar la tablas utilizo el único método que encontrado que es preguntar por la primera fila, guardar en un modelo de tabla, preguntar por la segunda, y así sucesivamente hasta llenar la tabla que quiero consultar.
Si sirve de algo, utilizo una combinación de estos dos manuales que encontré por la red:
http://www.chuidiang.com/java/mysql/BasicDataSource-Pool-Conexiones.php
http://www.chuidiang.com/java/mysql/mysql-java-basico.php
He mirado los tiempos, y la primera consulta tarda sobre 6 segundos, por que tiene que establecer la conexión (lo cual no me preocupa demasiado por que solo es la primera, es soportable), pero las otras consulta tardan sobre unos 1 - 2 segundos y con tablas de 15 registros como mucho. No quiero pensar que pasara cuando crezca la aplicación.
Por favor, pido si alguien sabe si hay alguna otra forma, o si se puede preguntar por varias filas a la vez, o alguna otra solución.
Valora esta pregunta


0