2009-12-23 19 views
8

Tengo una aplicación que usa JDBC para conectarse a Oracle 11g. Lamentablemente, la máquina en la que se ejecuta mi aplicación y la máquina Oracle están conectadas a través de una conexión de ancho de banda algo baja. No he olfateado la conexión, pero estoy bastante seguro de que la transmisión de datos a través de la conexión no está comprimida. Para mi aplicación, estoy más preocupado por el ancho de banda que por la latencia.compresión de conexión Oracle?

¿Hay alguna manera de decirle al controlador JDBC y a Oracle que comprima los datos que pasan por la conexión? Google ofrece muchas respuestas para la compresión de archivos de datos, pero no pude encontrar nada sobre la compresión del protocolo de red.

Estoy usando el controlador delgado de Oracle, pero si esto solo es compatible con el controlador OCI, podría cambiar a eso. Gracias por cualquier sugerencia!

Respuesta

3

Para responder directamente a la pregunta, los controladores (thin u OCI) no tienen tal mecanismo para la compresión. Y dado que los datos enviados son probablemente en algún formato binario original, no estoy seguro de que se compriman bien a través de SSL. Algún otro mecanismo para mejorar el rendimiento de la red necesitará ser empleado.

+0

El uso de compresión con túneles SSH con JDBC puede reducir la latencia –

9

No sé detalles sobre los controladores delgados y OCI de Oracle. Pero podría usar los túneles SSH para lograr compression.

  1. Por lo tanto, en su máquina Oracle, configura un daemon SSH. Si su servidor Oracle se está ejecutando bajo RedHat Linux, ha terminado
  2. En su máquina cliente (la que aloja su aplicación que se conecta a través de JDBC) configure una conexión SSH, habilitando un túnel comprimido. Puede usar la línea de comando SSH o Putty (si está en Windows) para hacer eso.

Configuración de la conexión a algo como esto:

$ ssh -L1521:localhost:1521 [email protected]_ip 

Luego, en su aplicación, utilice localhost: 1521 como la dirección de Oracle.

+0

No, una conexión VPN ciertamente ** no ** funcionará. Hay una cantidad limitada de ancho de banda: agregar una sobrecarga de VPN garantizará que se almacenen * menos * datos reales por paquete. –

+0

Si bien esa es una posibilidad, espero ver si el controlador de Oracle tiene esto incorporado, para hacerlo simple. – joev

+2

Esto no es una VPN. Es solo un túnel. Y ** ** funcionará. Si usa un túnel comprimido y lo que está tratando de transmitir puede comprimirse (como grandes cantidades de texto o XML), se comprimirá. –

5

En mi experiencia, la alta latencia perjudica el rendimiento usando los controladores JDBC de Oracle mucho más que el bajo ancho de banda. (al menos en la aplicación en la que trabajo). Usted dice que no está preocupado por la latencia, pero ¿podría darnos una estimación de la latencia de su entorno de bajo ancho de banda?

¿Qué tan grande es la información que está enviando? ¿Hay columnas BLOB? ¿Hay otras tecnologías involucradas, como un grupo de conexiones, o Hibernate? Hay muchos factores potenciales, no solo si sus datos están siendo comprimidos.

¿Ha realizado alguna emulación WAN para intentar aislar lo que más degrada su rendimiento? WANem es bastante fácil de configurar.

Pasé semanas en este problema, y ​​la latencia de 100-200ms nos perjudicó mucho más que una limitación de ancho de banda de 1Mbit. Esperemos que estés en un bote diferente: la compresión es un problema más fácil de resolver.

+0

Los pings de 64 bytes solo tardan 4 ms en completarse, así que eso no es tan malo. Sin BLOB, pero mucha actividad de INSERTAR. Sin agrupación de conexiones, es una conexión única. La dotación de personal es un poco ligera para las vacaciones, por lo que no puedo entrar en diagnósticos WAN profundos por el momento. Esa parecía la siguiente cosa obvia para mirar. ¡Pero gracias por el puntero a WANem, lo investigaré! – joev

+1

Si solo son 4ms, voy a decir que tienes razón en que la latencia debe jugar un papel mínimo. –