Próbuję parsować wyjątkowo duży plik json na iPadzie. Rozmiar pliku będzie się wahał od 50 do 100 mb (istnieje plik początkowy i będzie co miesiąc nowy pełny zestaw danych, które będą pobierane, analizowane i zapisywane w coredatach). Firma jako rozwiązanie dla przedsiębiorstw - plik json zawiera poufne dane klienta i musi być zapisany lokalnie na iPadzie, aby działał nawet w trybie offline. Udało się, gdy plik był poniżej 20mb, ale teraz zbiór danych stał się większy i naprawdę muszę go przeanalizować. Otrzymuję ostrzeżenia o pamięci podczas parsowania i po trzecim ostrzeżeniu po prostu się zawiesza. Mam kilka różnych jednostek danych podstawowych i właśnie ustawiam wszystkie wartości pochodzące z pliku json (kiedy aplikacja jest uruchamiana po raz pierwszy) i po wykonaniu wszystkich czynności wykonuję [context save]
.iPad - Parsowanie niezwykle dużego pliku json - Plik (między 50 a 100 MB)
Miałem nadzieję, że ktoś może mi doradzić jak radzić sobie z tak ogromnymi plikami. Myślałem o podzieleniu pliku json na kilka mniejszych plików json i może analizowałem je w wielu wątkach, ale nie wiem, czy to właściwe podejście. Chyba jednym wielkim problemem jest to, że cały plik jest przechowywany w pamięci - może jest jakiś sposób na "przesłanie" go do pamięci lub coś w tym stylu?
Używam JSONKit (https://github.com/johnezang/JSONKit) do parsowania pliku, ponieważ przeczytałem, że jest najszybszy (może jest wolniejszy, który jest łatwiejszy w pamięci?).
Z góry dziękuję.
Prawdopodobnie najlepiej byłoby, gdyby dane były przesyłane w częściach, a nie w jednym dużym łańcuchu JSON. Twoje podstawowe ograniczenie rozmiaru to przestrzeń wymagana dla wszystkich obiektów JSON. –
Co powiesz na zapisanie wszystkich danych w pliku sqlite lub zapisanie trwałości danych podstawowych za pomocą narzędzia Mac i skopiowanie go do aplikacji przed podpisaniem, zamiast przeniesienia tego na urządzenie? – Kerni
Jeśli masz kontrolę nad interfejsem API dla serwera, poleciłbym interfejs API, który pobierałby parametr Offset i parametr Count. Przesunięcie określa przesunięcie w wynikach, a liczba wskazuje ile rekordów do pobrania. Zatem kolejne wywołania interfejsu API zwiększyłyby przesunięcie o wartość licznika. – rajagp