Admitir una aplicación heredada de Java que utiliza archivos planos (texto sin formato) para la persistencia. Debido a la naturaleza de la aplicación, el tamaño de estos archivos puede alcanzar 100s MB por día, y a menudo el factor limitante en el rendimiento de la aplicación es el archivo IO. Actualmente, la aplicación usa un simple ol 'java.io.FileOutputStream para escribir datos en el disco.Rendimiento/estabilidad de un archivo de memoria asignado - Native o MappedByteBuffer - frente a simple ol FileOutputStream
Recientemente, hemos tenido varios desarrolladores que afirman que el uso de archivos mapeados en memoria, implementados en código nativo (C/C++) y accedidos a través de JNI, proporcionaría un mayor rendimiento. Sin embargo, FileOutputStream ya usa métodos nativos para sus métodos principales (es decir, escribir (byte [])), por lo que parece una suposición tenue sin datos duros o al menos evidencia anecdótica.
Tengo varias preguntas sobre este:
¿Es esta afirmación realmente cierto? ¿Se asignaron los archivos de memoria siempre proporcionan una E/S más rápida en comparación con de Java FileOutputStream?
que hace la clase MappedByteBuffer accede desde un FileChannel proporcionar la misma funcionalidad que una biblioteca de archivo asignado memoria nativa visitada a través de JNI? ¿Qué es MappedByteBuffer que le falta que podría llevarlo a utilizar una solución JNI?
¿Cuáles son los riesgos de utilizar archivos mapeados en memoria para disco IO en una aplicación de producción ? Es decir, las aplicaciones que tienen un tiempo de actividad continuo con reinicios mínimos (una vez al mes, máx.). Anécdotas de la vida real de la producción aplicaciones (Java o no) preferido.
Pregunta # 3 es importante - de que pudiera responder a esta pregunta a mí mismo parcialmente escribiendo una aplicación de "juguete" que perf pruebas IO utilizando las diversas opciones descritas anteriormente, pero mediante la publicación de SO que estoy esperando anécdotas/datos del mundo real para masticar.
[EDITAR] Aclaración: cada día de funcionamiento, la aplicación crea múltiples archivos que varían en tamaño de 100 MB a 1 gig. En total, la aplicación podría estar escribiendo múltiples gigas de datos por día.
Escogió esta respuesta para repartir los puntos. Además, la frase "o simplemente O performance en tu caso" realmente me quedó grabada. – noahlz
Sí, todo se trata de O. – Gary