Potrzebuję udostępniać dane między dwiema aplikacjami Java działającymi na tym samym komputerze (dwie różne maszyny JVM). Dokładam, że dane do udostępnienia są duże (około 7 GB). Aplikacje muszą uzyskiwać dostęp do danych bardzo szybko, ponieważ muszą odpowiadać na zapytania przychodzące z bardzo wysoką szybkością. Nie chcę, aby aplikacje przechowywały każdą kopię danych.Pliki mapowane w pamięci: plusy i minusy?
Widziałem, że jedną z opcji jest użycie plików mapowanych w pamięci. Aplikacja A pobiera dane skądś (powiedzmy bazę danych) i przechowuje je w plikach. Następnie aplikacja B może uzyskać dostęp do tych plików za pomocą java.nio
. Nie wiem dokładnie, jak działają pliki mapowane w pamięci, wiem tylko, że dane są przechowywane w pliku i że ten plik (lub jego część) jest zmapowany do regionu pamięci (pamięci wirtualnej?). Tak więc obie aplikacje mogą odczytywać dane w pamięci, a zmiany są automatycznie (jak sądzę?) Zatwierdzone do pliku. Nie wiem również, czy istnieje maksymalny rozmiar pliku, który ma być całkowicie odwzorowany w pamięci.
Moje pierwsze pytanie brzmi: jakie są różne możliwości dla dwóch aplikacji do udostępniania danych w tym scenariuszu (tzn. Biorąc pod uwagę, że ilość danych jest bardzo duża i że dostęp do tych danych musi być bardzo szybki)? Uściślam, że to pytanie nie jest związane z I/O odwzorowanymi w pamięci, to po prostu wiedzieć, jakie są inne sposoby rozwiązania tego samego problemu.
Moje drugie pytanie brzmi: jakie są plusy i minusy używania plików mapowanych w pamięci?
Dzięki
u można również podać szczegóły, jak dokładnie chcesz użyć pamięci mapowane pliki? – DarthVader
Widzę, że pytanie nie dotyczy wywoływania niektórych działań w innych programach. Jeśli tak, dlaczego nie ma wspólnej bazy danych do udostępniania danych? –
@Pangea Mam ograniczenia dostępu do czasu, aplikacje muszą szybko uzyskać dostęp do danych. –