Ich unterstütze eine Legacy-Java-Anwendung, die flache Dateien (Nur-Text) für die Persistenz verwendet. Aufgrund der Art der Anwendung kann die Größe dieser Dateien 100 MB pro Tag erreichen, und häufig ist der begrenzende Faktor für die Anwendungsleistung Datei-IO. Derzeit verwendet die Anwendung eine einfache ol 'java.io.FileOutputStream, um Daten auf die Festplatte zu schreiben.Leistung/Stabilität einer Memory Mapped-Datei - Native oder MappedByteBuffer - vs. Plain ol 'FileOutputStream
Vor kurzem hatten wir mehrere Entwickler behaupten, dass die Verwendung von Speicher-Mapped-Dateien, implementiert in nativem Code (C/C++) und Zugriff über JNI, eine höhere Leistung bieten würde. FileOutputStream verwendet jedoch bereits native Methoden für seine Kernmethoden (z. B. write (byte [])), so dass es eine schwache Annahme ohne harte Daten oder zumindest anekdotische Beweise zu sein scheint.
Ich habe einige Fragen zu diesem Thema:
Ist diese Behauptung wirklich wahr? Werden im Speicher abgebildete Dateien immer bieten schneller IO im Vergleich zu Java FileOutputStream?
Ist die Klasse MappedByteBuffer von einem Filechannel zugegriffen über JNI die gleiche Funktionalität wie eine native Memory-Mapped-Datei Bibliothek bieten zugegriffen? Was ist MappedByteBuffer fehlt, was dazu führen könnte, dass Sie eine JNI-Lösung verwenden?
Welche Risiken bestehen bei der Verwendung von Speicherkarten für Disk IO in einer Produktion Anwendung? Das heißt, Anwendungen , die kontinuierliche Uptime mit minimale Neustarts (einmal im Monat, max) haben. Real-Life-Anekdoten aus der Produktion Anwendungen (Java oder anders) bevorzugt.
Frage # 3 ist wichtig - ich selbst diese Frage teilweise durch das Schreiben einer „Spielzeug“ Anwendung, die Tests perf antworten konnte die verschiedenen oben beschriebenen Optionen IO verwenden, aber durch die Veröffentlichung SO Ich hoffe auf reale Anekdoten/Daten zum Kauen.
[EDIT] Klarstellung - jeden Tag der Operation erstellt die Anwendung mehrere Dateien in der Größe von 100 MB bis 1 Gig. Insgesamt könnte die Anwendung mehrere Gigs Daten pro Tag schreiben.
Wählte diese Antwort, um die Punkte herum zu verbreiten. Auch der Satz "oder nur O Leistung in Ihrem Fall" ist mir wirklich treu geblieben. – noahlz
Yup, alles über den O. – Gary