Wątek przeniesiony 2019-05-18 00:49 z przez somekind.

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

Odpowiedz Nowy wątek
2019-05-17 01:12
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.

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? - Silv 2019-05-17 01:45
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. - Wolsiak 2019-05-17 01:51

Pozostało 580 znaków

2019-05-17 01:54
0

Chcesz zapisać do bazy czy pobrać z bazy?


Zapisać do bazy - Wolsiak 2019-05-17 01:55
Samo zapisanie to nie problem, problemem jest ta pętla która wykonuje się długo strasznie. - Wolsiak 2019-05-17 01:56

Pozostało 580 znaków

2019-05-17 01:57
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, 2019-05-17 01:57
W momencie kiedy robimy strzał do API żeby wyciągnąć obiekt w url musimy podać jego id, dlatego mam tą pętle for w której robię kolejno strzały do API żeby wyciągnąć obiekt i zapisuje ten obiekt w bazie danych to działa, ale mi chodzi o to żeby to przyspieszyć. Żeby zamiast 10 minut zapisalo wszystkie dane w znacznie krótszym czasie. - Wolsiak 2019-05-17 02:03
Czyżbyś pobierał obiekty z jednej bazy, a zapisywał do drugiej? - Silv 2019-05-17 02:05
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 - Wolsiak 2019-05-17 02:13
OK, teraz zrozumiałem, że mówisz o odczytywaniu z bazy dostępnej przez API, a zapisywaniu do swojej bazy. - Silv 2019-05-17 02:15
API zwraca jsona - Wolsiak 2019-05-17 02:15
No ja niestety nie wiem, jak to ulepszyć, przepraszam, ale może ktoś inny będzie wiedzieć. - Silv 2019-05-17 02:17

Pozostało 580 znaków

2019-05-17 07:56
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 ;)

Pozostało 580 znaków

2019-05-17 08:39
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.

edytowany 1x, ostatnio: mr_jaro, 2019-05-17 08:41

Pozostało 580 znaków

2019-05-18 00:50
0

Sparing brzmi jak Java, więc przenoszę.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-05-18 10:37
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0