2011-02-08 16 views
5

Tenemos una aplicación de escritorio Java que accede a una base de datos Derby ubicada en una unidad compartida de red en lugar de localmente.¿Cuáles son los peligros de una conexión integrada a Derby en una red?

Mientras que varias instancias de la aplicación comparten la base de datos, solo una instancia tiene una conexión en vivo.

Esto ha funcionado bastante bien desde hace más de dos años pero en ocasiones nos encontramos con daños en la base de datos, que no podemos determinar como resultado de un error de software o debido a la red entre la aplicación y la base de datos remota.

Nos damos cuenta de que los documentos de Derby establecen que las bases de datos incrustadas se deben usar solo para la persistencia local, pero ¿alguien puede sugerir algunas trampas específicas que podríamos esperar encontrar a través de esta configuración?

¡Gracias de antemano!

Jim

+4

Parece que ya ha encontrado una gran trampa: la corrupción de la base de datos. –

Respuesta

2

Específicamente con respecto a la corrupción de la base de datos, creo que hay (al menos) dos problemas fundamentales con la base de datos en el almacenamiento compartido de red: (1) cuando Derby intenta asignar espacio mediante el crecimiento de un archivo, el sistema de archivos puede informar la asignación fue exitosa aunque, de hecho, el disco está lleno; (2) cuando Derby intenta asegurarse de que la escritura de un disco está escrita completamente en el disco, el sistema de archivos puede informar que los datos se escribieron en el disco aunque, de hecho, solo se haya escrito en la memoria.

Cualquiera de los problemas anteriores, si se producen en el momento justo, puede causar daños en la base de datos.

+0

(2) <- esto. la mayoría de los sistemas de archivos de red simulan las llamadas fsync. y la mayoría de las bases de datos basadas en archivos requerían fsync para garantizar la integridad de los datos. – jtahlborn

1

nos damos cuenta del estado docs Derby de que las bases de datos embebidas deben utilizarse sólo para la persistencia local, pero puede alguien sugerir algunas de las dificultades específicas que podríamos esperar encontrar a través de esta configuración?

Yo diría que debe prestar atención a lo que dice la documentación. Es poco probable que la gente que desarrolló Derby brinde consejos que limiten la aplicabilidad de Derby sin una buena causa.

(Y puedo entender por qué múltiples instancias de aplicaciones que comparten una base de datos Derby incorporada que pueden ser problemáticos. Derby asumiría que no tiene que preocuparse por varias instancias de lectura y actualización, y los datos pueden no al ras en el orden necesario para permitir que esto funcione de manera segura. Tal lavado no debe ser necesario ... a menos que esté utilizando Derby de una manera que no se supone a.)

Además, ¿por qué no tomar el enfoque de utilizar el Network Server versión de Derby?

+0

@Marcos Vandel - bueno, parece que los requisitos del negocio han cambiado ... si las personas ahora están tratando de compartir bases de datos integradas. O bien debe decirles que "dejen de hacer eso", o debe cambiar su producto para usar la versión cliente/servidor de Derby. –

+0

No hay nada "técnicamente" que nos impida usar la versión cliente/servidor de Derby. Nuestra configuración actual se realizó para satisfacer los requisitos comerciales de la industria en la que se basan nuestros programas y el entorno en el que opera. –

+0

Stephen, tal vez debería leer la publicación original con más cuidado. No estoy preguntando si las personas piensan que esta configuración es una "buena idea" o no, sino más bien qué problemas ** específicos ** podríamos esperar al usar Derby de esta manera. Y no, los requisitos comerciales ciertamente no han cambiado. –

Cuestiones relacionadas