Czy ten Spring Batch jest dobrze napisany?

Czy ten Spring Batch jest dobrze napisany?
B2
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:3
0

Hej,
Piszę własnego batcha w ramach nauki i chciałbym się zapytać czy ten przykład jest dobrze zrobiony?
https://vianneyfaivre.com/tech/spring-boot-spring-batch-java-8-custom-itemreader

Chodzi mi o to, że użytkownik (autor) w metodzie reader() tworzy listę plików. Wzbudziło to moją nieufność, ponieważ prosi się to o OutOfMemoryError. Po prostu wczytuje wszystkie pliki z danego katalogu do listy, a następnie zwraca FileReader który implementuje ItemReader. Czy to nie prosi się o kłopoty? Jeżeli ten przykład jest źle zrobiony (może jest dobrze) poproszę o jakieś rozjaśnienie, jak to powinno wyglądać poprawnie. Dzięki

edytowany 1x, ostatnio: batchers23
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Postów:1875
1

File w Javie to taki „uchwyt” do pliku, którego zawartość nie jest wczytywania do pamięci ad hoc. Oczywiście gdyby tych plików w katalogu było zylion, wtedy lista może nie zmieścić się w pamięci, ale to jakis corner case. Gdzie widzisz problem?


”Engineering is easy. People are hard.” Bill Coughran
B2
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:3
0
Charles_Ray napisał(a):

File w Javie to taki „uchwyt” do pliku, którego zawartość nie jest wczytywania do pamięci ad hoc. Oczywiście gdyby tych plików w katalogu było zylion, wtedy lista może nie zmieścić się w pamięci, ale to jakis corner case. Gdzie widzisz problem?

No właśnie, a to gubi przetwarzanie batchowe w tym sensie, że powinno to być (proszę o poprawę, jeżeli się mylę )niezależne od ilości plików. Czy parę milionów plików nie wywaliłoby batcha?

edytowany 5x, ostatnio: batchers23
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Bez przesady. Obiekt File nie jest ciężki. Musiałbyś serio mieć tych plików kolosalne ilości. Taki obiekt to jakieś bajty. Nawet jakby miał 1kB (a ma wielokrotnie mniej) to milion plików to raptem 1GB pamięci.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
danek
raptem ( ͡° ͜ʖ ͡°)
Charles_Ray
Raptem, zobacz pod jakie heapy są projektowane algorytmy typu G1 czy Shanandoah
Shalom
@danek: mój kilkuletni laptop ma 32GB, każdy z kilkudziesięciu nodów na których odpalam swoje aplikacje w pracy ma > 256GB ramu. Tak, 1GB to jest "raptem".
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Postów:1875
1

Z dziennikarskiego obowiązku napiszę o jeszcze jednym ograniczeniu, o którym do tej pory nie było mowy - jest to systemowy limit file descriptorów per proces.

Natomiast w przypadku tego kodu jest luz, ponieważ FD jest tworzony dopiero przy tworzeniu java.io.FileDescriptor, a nie samego java.io.File.


”Engineering is easy. People are hard.” Bill Coughran

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.