Necesito compartir datos entre dos aplicaciones Java que se ejecutan en la misma máquina (dos JVM diferentes). Preciso que los datos que se compartirán son grandes (alrededor de 7 GB). Las aplicaciones deben acceder a los datos muy rápido porque tienen que responder consultas entrantes a una velocidad muy alta. No quiero que las aplicaciones tengan una copia de los datos.Archivos mapeados en memoria: pros y contras?
He visto que una opción es utilizar archivos mapeados en memoria. La aplicación A obtiene los datos de algún lugar (digamos una base de datos) y los almacena en archivos. Entonces la aplicación B puede acceder a estos archivos usando java.nio
. No sé exactamente cómo funcionan los archivos mapeados en memoria, solo sé que los datos están almacenados en un archivo y que este archivo (o parte de él) está asignado a una región de la memoria (¿memoria virtual?). Entonces, las dos aplicaciones pueden leer y escribir los datos en la memoria y los cambios son automáticamente (¿supongo?) Comprometidos con el archivo. Tampoco sé si hay un tamaño máximo para que un archivo se mapee completamente en la memoria.
Mi primera pregunta es cuáles son las diferentes posibilidades para que dos aplicaciones compartan datos en este escenario (quiero decir teniendo en cuenta que la cantidad de datos es muy grande y que el acceso a estos datos debe ser muy rápido). Preciso que esta pregunta no está relacionada con la E/S mapeada en memoria, solo para saber cuáles son las otras formas de resolver el mismo problema.
Mi segunda pregunta es ¿cuáles son los pros y los contras del uso de archivos mapeados en memoria?
Gracias
u puede también proporcionar detalles, ¿cómo es exactamente que desea utilizar la memoria mapeada archivos? – DarthVader
veo la pregunta no es sobre la activación de alguna acción en OTH otro programa. Si es así ¿Por qué no una base de datos común para compartir datos? –
@Pangea Tengo restricciones de acceso de tiempo, las aplicaciones deben acceder a los datos rápidamente. –