Poniższy post potraktuj (potraktujcie) jako nie znam się to się wypowiem.
Jak zrobię szybkie rozwiązanie to padną serwery i będzie na mnie.
Jak nie zrobię rozwiązania to nie będzie raportów i będzie dym i też na mnie :D
Na Hadoopa nie mam czasu, a i tak go nie umiem nic a nic.
Brzmi jak słabe skalowanie, ale nie wnikam, nie każdy ma nieograniczony Azure/AWS itp.
Bardzo mi się podobają tutaj pomysły zrobienia sobie czegoś na wzór hurtowni. Skoro robisz raporty to stawiam, że z danych, które już się nie zmieniają.
Robisz kilka/naście joinów do jednego raportu. Zamiast robić te joiny wtedy kiedy potrzebne są te raporty (a z tego co czytam nie pobiera się jednego raportu tylko jakąś ustaloną z góry liczbę) to pyk hurtownię raz dwa.
Po odpowiednim przetworzeniu danych/wykonaniu konkretnych operacji/przetworzeniu odpowiedniego eventu zebrać wszystkie potrzebne dane do kupy, władować w POJO i zapisać w osobnej bazie. Jak będzie trzeba je wyciągnąć to masz jednego SELECT'a i z głowy.
Przy takim podejściu możesz się wtedy na spokojnie zastanowić co z resztą (czyli danymi które masz w bazie ale jeszcze nie w hurtowni):
- wybierasz rozwiązanie
lazy
- jak potrzebny raport to zbierasz wszystko do kupy, zapisujesz to nowe POJO i generujesz raporcik (zauważ, że stan hurtowni tutaj jest niespójny, ja bym z tego rozwiązania nie korzystał jeśli jest taka możliwość)
- żeby uniknąć zajechania systemu robisz sobie coś na wzór web crawlera, tylko, że do swoich danych - przechodzisz sobie po kolei przez jakieś tam kolejne ID/daty/cholera_wie_co i generujesz po kolei te POJO, ale z umiarem i kilku/kilkunasto sekundową przerwą, żeby systemy miały wystarczająco czasu przerobić pozostałe zapytania. Ba, możesz nawet osobny serwisik sobie do tego stworzyć, ustawić, żeby orał po bazie tylko w godzinach małego load'u i za parę nocy będziesz się śmiał przy piwku, że problem się sam rozwiązał i to małym kosztem.
Jak tych joinów jest rzeczywiście dużo to bardziej obeznani koledzy polecą jakieś rozwiązania. Zawsze jest JdbcTemplate
ze Springa, który może pomóc trochę zredukować narzut JPA/Hibernate/Spring Data. Daj znać co tam wykminiłeś, lubię takie problemy :P
Architektura to zwykłe JPAowe repozytorium wystawione na kontroler, który zwraca strumień bajtów
- encja na twarz i pchasz, nieładnie
P.S. Nie znam szczegółów, mogę doradzać źle, przepuść moją opinię przez sito. A, no i nigdy nie pracowałem na Oracle DB.