Pregunta

Tengo un número de bastante grande binario archivos (registros de longitud fija, el diseño de los cuales se describe en otro - Pruebas - archivo). Los archivos de datos pueden conseguir tan grande como 6 GB. archivos de diseño (cuadernos COBOL) son de tamaño pequeño, por lo general menos de 5 KB.

Todos los archivos de datos se concentran en un servidor GNU / Linux (a pesar de que se generaron en un mainframe).

debo proporcionar los probadores con los medios para editar esos archivos binarios. Hay un producto gratuito llamado RecordEdit ( http://record-editor.sourceforge.net/ ) , pero tiene dos inconvenientes importantes:

  1. Obliga a los probadores para descargar los archivos de gran tamaño a través de SFTP, sólo para subirlos de nuevo cada vez que un ligero cambio se ha realizado. muy ineficiente.

  2. Se carga la totalidad archivo en la memoria de trabajo, lo que hace inútil para todos, pero la relativamente pequeña archivos de datos.

Lo que tengo en mente es una arquitectura cliente / servidor basado en Java:

  • El servidor sería la ejecución de un permanente procesar, para escuchar peticiones orientadas edición, procedentes de el cliente. Dichas solicitudes haría incluir cosas como

    • devuelve la lista de archivos disponibles

    • Bloqueo de cierto archivo de edición

    • modificar estos datos en ese disco

    • Vuelta al enésimo página de registros

    y así sucesivamente ...

  • El cliente puede tomar cualquier forma (RCP-basa en un escritorio -que es mi primera candidate-, ncurses en el mismo servidor, una red central aplicación ...) con tal de que sea capaz de enviar peticiones al servidor.

he estado explorando NIO (a causa de sus buffers) y Mina (debido a la transparencia de protocolo) con el fin de implementar el esquema. Sin embargo, antes de que cualquier avance adicional de este esfuerzo, me gustaría recoger sus opiniones de los expertos.

Es la mía una forma razonable para enmarcar el problema?

¿Es factible hacerlo utilizando el lenguaje y los marcos que estoy pensando? ¿Es conveniente?

¿Conoce algún patrón, planos, casos de éxito o proyectos abiertos que se asemejan o tienen que ver con lo que estoy tratando de hacer?

¿Fue útil?

Solución

  

Es la mía una forma razonable para enmarcar el problema?

OMI, sí.

  

¿Es factible hacerlo utilizando el lenguaje y los marcos que estoy pensando?

Creo que sí. Pero hay otras alternativas. Por ejemplo:

  • Ponga los registros en una base de datos y el acceso de una llave que consiste en un nombre de archivo + un número de registro. Podría ser un RDBMS completos, o una solución más ligera.

  • Implementar como un servicio web REST con una interfaz de usuario implementado en HTML + Javascript.

  • Implementar el uso de un sistema de archivos escalable distribuida.

Además, a partir de su descripción no parece ser una necesidad apremiante de utilizar un transporte / capa independiente altamente escalable ... a menos que necesite soportar cientos de usuarios simultáneos.

  

¿Es conveniente?

Conveniente para quién? Si se habla de que el desarrollador, que depende de si ya está familiarizado con esos marcos.

Otros consejos

A mi entender, lo más difícil aquí está decodificando los archivos en el servidor. Una vez que has escrito eso, debería ser bastante fácil.

Yo sugeriría que, cualquiera que sea la cosa se utiliza en el cliente es, básicamente, lo que debería carga un 'diff' de los cambios de la persona.

Podría tener sentido para hacer algo que actúa como una base de datos (o utilizar una base de datos existente) para estos datos? O hay demasiado de él?

Dependiendo de cuántas personas necesita hacer esto, la solución rápida y sucia, es ejecutar el programa a través de X expedición - que elimina varios de los problemas .. siempre y cuando ese servidor tiene un buen montón de memoria RAM libre.

¿Ha considerado el uso de un sistema de archivos distribuido como OpenAFS ? Eso debería ser capaz de manejar archivos muy grandes. A continuación, puede escribir una aplicación del lado del cliente para la edición de los archivos como si fueran locales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top