Wpis z mikrobloga

Co robic jak w mikroserwisach generuje jakis wiekszy plik (np jakies zdjecie czy pdf) i mam OutputStream, a potrzebuje go wyslac gdzies jako InputStream. Ladowac do pamieci czy uzywac innych metod np. zapisywanie na dysku lub PipedStreamy?
#java #programowanie
  • 6
Z założenia, jeśli plik jest duży to powinieneś go gdzieś zapisać, a do drugiej usługi przesłać tylko informacje gdzie ten plik leży. Zakładając, że coś pójdzie 'nie tak' to będziesz przykładowo 5 razy retryował przesyłanie streama 1gb bo przy ostatnim kilobajcie będzie jakiś fakap?
Z założenia, jeśli plik jest duży to powinieneś go gdzieś zapisać, a do drugiej usługi przesłać tylko informacje gdzie ten plik leży. Zakładając, że coś pójdzie 'nie tak' to będziesz przykładowo 5 razy retryował przesyłanie streama 1gb bo przy ostatnim kilobajcie będzie jakiś fakap?


@januszgorszyciel: dokładnie, dodatkowo waga pliku to często zajęta pamięć tam gdzie nie potrzeba i dłuższy czas strumieniowania.

Dobra analogia są strony internetowe w response nie mają grafik
@januszgorszyciel: Moze zle to opisalem.
1. Musze wygenerowac duzy CSV z bazy danych
2. Wyciagam z bazy po trochu i zapisuje do OutputStream
3. Konwertuje OutputStream do InputStream
4. Zapisuje InputStream w AWS S3

Jak dokonac punktu 3 zeby nie zjadlo duzo pamieci? Lepiej uzyc PipedOutputStream, PipedInputStream do konwersji na InputStream czy zapisac to na dysku i potem wczytac z dysku do InputStream?
@Myrcin-: To ja zapytam inaczej, dlaczego to jest istotne czy Twoja maszyna zużyje 1x pamięci zamiast 2x pamięci? Skąd wiesz czy Twoje obecne rozwiązanie zużywa za dużo pamięci? Co to znaczy dużo pamięci? Ogólnie 'premature optimalization' jest błędem jeśli to nie są wymagania zewnętrzne. Jeśli badasz to w celach hobbystycznych to zmierz użycie pamięci w różnych scenariuszach i będziesz wiedział i miał dowody na papierze.
@Myrcin-: Ad. 3. Jeśli nie ma zależnych danych pomiędzy wierszami to nie widzę przeszkód, żeby czytać wejście i przetwarzać je na wyjście wiersz po wierszu. Chyba najprostszy sposób na poradzenie sobie z dużymi plikami (długimi w liczbie wierszy) bez pchania się w overengineering.