Tak więc w przypadku niektórych prac badawczych muszę przeanalizować masę nieprzetworzonych danych dotyczących ruchu (obecnie prawie cały gigant danych i ich wzrost) oraz wypluć informacje ilościowe i wykresy.Ładowanie i analizowanie ogromnych ilości danych
Napisałem większość tego przy użyciu Groovy (z JFreeChart do tworzenia wykresów) i kiedy wydajność stała się problemem, przepisałem główne części w Javie.
Problem polega na tym, że analiza i kreślenie trwa około minuty, podczas gdy ładowanie wszystkich danych zajmuje około 5-10 minut. Jak możesz sobie wyobrazić, staje się to naprawdę denerwujące, gdy chcę wprowadzić małe zmiany w działkach i zobaczyć wyniki.
Mam kilka pomysłów na ustalenie to:
załadowanie wszystkich danych w bazie danych SQLite.
Zalety: Będzie szybko. Będę w stanie uruchomić SQL, aby uzyskać zbiorcze dane, jeśli zajdzie taka potrzeba.Minusy: Muszę napisać cały ten kod. Ponadto, dla niektórych działek potrzebuję dostępu do każdego punktu danych, więc ładując kilkaset tysięcy plików, niektóre części mogą być nadal wolne.
Java RMI do zwrócenia obiektu. Wszystkie dane są ładowane do jednego obiektu głównego, który w przypadku serializacji wynosi około 200 MB. Nie jestem pewien, ile czasu zajmie przeniesienie obiektu o powierzchni 200meg za pośrednictwem RMI. (ten sam klient).
Musiałbym uruchomić serwer i załadować wszystkie dane, ale to nie jest wielka sprawa.
major pro: powinna przyjąć najmniejszą ilość czasu, aby napisać
uruchomić serwer, który ładuje dane i wykonuje groovy skryptu na komendzie w VM serwera. Ogólnie rzecz biorąc, wydaje się, że najlepszym pomysłem (do czasu realizacji vs wydajności, jak również inne długofalowe korzyści)
Co chciałbym wiedzieć, że inni ludzie rozwiązać ten problem?
Analiza pointericzna (3/29/2011): Kilka miesięcy po napisaniu tego pytania, musiałem nauczyć się R, aby uruchomić pewne statystyki. Korzystanie z R było dużo łatwiejsze i szybsze do analizy danych i agregacji niż to, co robiłem.
Ostatecznie wykorzystałem Javę do uruchomienia wstępnej agregacji, a następnie uruchomiłem wszystko inne w R. R było również o wiele łatwiejsze do tworzenia pięknych wykresów niż przy użyciu JFreeChart.
Wiem, że bazy danych są ogólnie najlepsze i najbardziej skalowalne, a co nie. Gdybym pisał konkretną aplikację, nie byłoby to żadnym pytaniem. Myślę, że masz rację, jeśli # 2 może zostać osiągnięty przy minimalnym trafieniu wydajności (ponieważ może być zaimplementowany w około 5 liniach kodu), to może być mój najlepszy zakład. –
@Rev - nie "najbardziej skalowalny". Technologie takie jak Hadoop są bardziej skalowalne. –