Zapisywanie dużej ilości obiektów z API

Zapisywanie dużej ilości obiektów z API
WO
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 6 lat
  • Postów:6
0

Witam,
Bawię się z API i chce zapisać sporą ilość danych do bazy. Niestety API z którego korzystam nie udostępnia możliwości wykonania strzału w którym zwracało by mi listę tych obiektów. Żeby wyświetlić obiekt trzeba w url podać id tego obiektu. Robię to w pętli for z tym że danych jest ok 14000 i zanim te dane się załadują trzeba poczekać dość długo. I pytanie do was czy da się to w jakiś sposób przyspieszyć? Apka pisana jest w sparingu.
Pozdrawiam.

Silv
Skoro API jest tak zaprojektowane, to ja bym się zastanowił, czy jego przeznaczeniem jest pobieranie tak dużej ilości obiektów. Być może problem może być rozwiązany w inny sposób?
WO
No na bank nie, z tym że nie mogę innego API użyć takie API dostałem i tyle mam zrobić pewna funkcjonalność i chce wyświetlić listę tych obiektów. W ramach nauki.
Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

Chcesz zapisać do bazy czy pobrać z bazy?


WO
Zapisać do bazy
WO
Samo zapisanie to nie problem, problemem jest ta pętla która wykonuje się długo strasznie.
Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

Zapisać do bazy

Ale napisałeś tak:

Żeby wyświetlić obiekt trzeba w url podać id tego obiektu.

To raczej pobieranie z bazy.


edytowany 2x, ostatnio: Silv
Zobacz pozostały 1 komentarz
Silv
Czyżbyś pobierał obiekty z jednej bazy, a zapisywał do drugiej?
WO
Skoro API ma takie obiekty to musi mieć przecież jakąś swoją bazę :D z tym że jak mówię nie mam możliwości z API wyświetlić listy tych obiektów dlatego też chce zapisać wszystkie obiekty w swojej bazie i później zrobić metodę która będzie wyświetlała ta listę. Z tym że jak mówię ta pętla wykonuje się dość długo. Przykładowo strzał wygląda tak www.api.com?people?personId=632&apiKey=63728 no i w metodzie mam tak że jest ta pętla for i zmieniam to id aż do ok 14000
Silv
OK, teraz zrozumiałem, że mówisz o odczytywaniu z bazy dostępnej przez API, a zapisywaniu do swojej bazy.
WO
API zwraca jsona
Silv
No ja niestety nie wiem, jak to ulepszyć, przepraszam, ale może ktoś inny będzie wiedzieć.
Akihito
  • Rejestracja:ponad 8 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Śląsk
  • Postów:248
1

Hmmm moze wielowatkowsc i jakis parallel for :)? Jesli zalezy ci tylko na zwrotkach a nie na kolejnosci pobran to sprobuj skorzystac z parallel for nie wiem jak w Javie to macie ale w C# to Parallel.For(). Generalnie sprobj asynchronicznosci i wielowatkowsci ;)

mr_jaro
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Grudziądz/Bydgoszcz
  • Postów:5300
1

Sam zapis do bazy trwa zapewne krócej niż pobranie jednego rekordu z api, czyli optymalizację nie robisz na zapisie a na pobieraniu danych a tutaj pomoże jedynie zrównoleglanie. Nie robię w javie, ale zapewne ma coś co pozwala pobierać dane asynchronicznie, a jeśli nie no to musisz utworzyć sam dodatkowe wątki.


It's All About the Game.
edytowany 1x, ostatnio: mr_jaro
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Wrocław
0

Sparing brzmi jak Java, więc przenoszę.

danek
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Lokalizacja:Poznań
  • Postów:797
2

Pierwsze co to najpierw pobierz wszystkie obiekty, a potem w jednej transakcji wepchnij do bazy (obsługa transakcji jest relatywnie wolna). Samo pobieranie możesz zrównoleglić, tylko nie przesadzaj jakoś za mocno bo możesz albo ubić serwer z którego pobierasz, albo po prostu Cie odetną.


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

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.