Mam duży plik xml, który zawiera wiele elementów podrzędnych. Chcę móc uruchomić niektóre zapytania xpath. Próbowałem używać vtd-xml w java, ale czasami dostaję błąd outofmemory, ponieważ xml jest tak duży, że mieści się w pamięci. Czy istnieje alternatywny sposób przetwarzania tak dużych plików xml.Przetwarzanie dużych plików xml
Odpowiedz
spróbować http://code.google.com/p/jlibs/wiki/XMLDog
to wykonuje xpaths pomocą saksofonie bez tworzenia reprezentacji w pamięci dokumentów XML.
jest bardzo skuteczny przy pracy z dużymi plikami
Nie można używać XPath z bezpośrednim strumieniem SAX (brak ponownego przeanalizowania całego pliku dla każdego zapytania). –
@Glenn Maynard - ale z pewnością OP * musi * dokonać ponownej analizy pliku dla każdego zapytania (lub serii zapytań). DOM jest zbyt duży, aby zmieścić się w pamięci. –
Co chcesz teraz zrobić? Odgłosami tego próbujesz użyć parsera opartego na DOM, który zasadniczo ładuje cały plik XML do pamięci jako reprezentację DOM. Jeśli masz do czynienia z dużym plikiem, lepiej skorzystaj z parsera SAX, który przetwarza dokument XML w streamingu.
ja osobiście polecam StAX do tego.
Czy używasz standardowego VTD lub rozszerzoną VTD-xml? Jeśli używasz rozszerzonego XML, masz możliwość użycia mapowania pamięci ... czy próbowałeś tego?
Korzystanie XPath może nie być dobrym pomysłem, jeśli plan na kompilacji wielu wyrażeń dynamicznie w długo żył aplikacji.
Nie jestem do końca pewien, jak wersja Java XPath działa, ale w .NET XPath kompiluje dynamiczny montaż następnie dodaje go do domeny aplikacji. Kolejne zastosowania wyrażenia wyglądają na złożenie załadowane do pamięci.
W jednym przypadku, w którym używałem XPath, doprowadziło to do sytuacji, w której myślę, że ten sam rodzaj mechanizmu spowalniał zapełnianie pamięci podobnej do wycieku pamięci.
Moja teoria jest taka, że jak każde wyrażenie został skompilowany przy użyciu wartości z użytkownikiem, co było prawdopodobnie skompilowane wyrażenia wyjątkowy, więc nowa ekspresja została opracowana i dodany do domeny aplikacji.
Ponieważ można wyjąć zespół z domeny aplikacji bez konieczności ponownego uruchamiania aplikacji całą domenę, pamięć została konsumowane każdorazowo wyrazem była oceniana i nie może zostać odzyskane. W wyniku tego kod wyciekał pamięć w postaci złożeń w pamięci, a po chwili dobrze znamy wyniki.
- 1. Clojure - Przyspiesz przetwarzanie dużych plików
- 2. Clojure - przetwarzanie dużych plików z małą pamięcią
- 3. Parsowanie dużych plików pseudo-xml w pythonie
- 4. Parsowanie bardzo dużych plików XML w php
- 5. Wyświetlanie dużych plików XML w czasie zaćmienia?
- 6. Używanie python lxml.etree do dużych plików XML
- 7. Przechowywanie dużych plików XML w MongoDB
- 8. Przetwarzanie dużych danych w pythonie
- 9. Przetwarzanie XML do JSON
- 10. Przyspieszone przetwarzanie XML GPU
- 11. Przetwarzanie XML w Spark
- 12. Przetwarzanie na dużych bitmapach (do 3 GB)
- 13. Przetwarzanie dużych zestawów danych przy użyciu LINQ
- 14. Parsowanie bardzo dużych plików XML i rozesłanie do obiektów Java
- 15. Dzielenie dużych plików XML na porcje zarządzalne dla Hadoop
- 16. Ładowanie dużych plików XML i radzenie sobie z MemoryError
- 17. PHP - Odczyt i naprawa dużych niepoprawnych plików XML
- 18. Zarządzanie pamięcią dużych plików
- 19. CodeIgniter Przesyłanie dużych plików
- 20. Przesyłanie plików dużych plików PHP/AJAX
- 21. przetwarzanie tekstu z dwóch plików
- 22. Przetwarzanie plików symboli w Xcode
- 23. Jak wykonać wirtualne przetwarzanie plików?
- 24. Jak używać programu Nokogiri :: XML :: Reader do analizowania dużych plików XML?
- 25. Skuteczne odczytywanie dużych plików tekstowych
- 26. Rozszerzenie dużych plików dla git
- 27. FSEvents i kopiowanie dużych plików
- 28. ANTLR4 Python parsowanie dużych plików
- 29. Jak wyłączyć przetwarzanie XML w Railsach 3
- 30. Przetwarzanie lokalnego pliku XML w systemie Android
Dlaczego na tym pytaniu jest tag Pythona? Czy masz nadzieję, że ludzie będą oferować rozwiązania Python? – Spaceghost
Czy występują błędy pamięci podczas analizowania dokumentu lub podczas korzystania z zapytań xpath? Jeśli drugi, być może problem dotyczy kwerendy xpath. Tak czy inaczej, czy próbowałeś zwiększyć wartość -Xmx dla sterty dla JVM? – Spaceghost
spróbuj rozszerzonego pliku vtd-xml i użyj opcji odwzorowania pamięci –