Zapis dużych danych do bazy danych #JAVA#MYSQL#SPRING#

0

Hey, pisze z prośbą o pomoc przy zapisie dużych plików do bazy dancyh. Mam plik xml który zawiera liste z danymi ok 50000 użytkowników. Odczytu z xmla wraz zapisaniem całej listy do bazy danych dokonuje w następujący sposób:

public void readXml() throws JAXBException{
        File xmlFile = new File("src\\main\\resources\\users.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(Users.class, User.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        Users user = (Users)jaxbUnmarshaller.unmarshal(xmlFile);
        userRepository.saveAll(user.getUser());
    }
  1. Problem jest następujący, zapisuje mi jedynie 1000 pierwszych użytkowników do tabeli w DB, jak zapisać więcej?
  2. Czy istnieje szybszy sposób na zapisanie ?
2

A sprawdzałeś czy do obiektu zdeserializowali się wszyscy użytkownicy? Nie znam JAXB, ale może ma jakiś limit. Możesz też spróbować saveAllAndFlush.

Jeśli chodzi o szybkie zapisywanie to kiedyś wygenerowałem sobie inserta na 5000 rekordów w PreparedStatement. Potem sobie iterowałem po kolekcji i wykonywałem zapytanie, gdy się cało wypełniło. Osiągnąłem w ten sposób przepustowość ok. 1M rekordów na sekundę, więc powinno spokojnie starczyć.

0

@szatkus: Zapisują się wszystkie:
zdj1.png
Jednak w bazie danych widnieje tylko 1k pozycji:
zdj2.png

3

No 50k nie powinieneś naraz wrzucać do bazy, rozdziel sobie to na porcje po np. 500 recordów
Spróbuj może ustawić spring.jpa.properties.hibernate.jdbc.batch_size na 500 i odpal logi z Hibernate.

0

@Aleksander32: W jaki sposób to dzielić żeby zapisywać jak mam to w liście?

2

Czy da się lepiej? Da. Wyrzucamy hibernate. Piszemy insert into i uzywamy batchUpdate

2

A przypadkiem ten tool do przeglądania danych nie ma domyślnie limitu na 1000?

1

Robisz jakieś dziwne rzeczy, co chcesz osiągnąć? Wrzucanie 50k rekordów z pliku na raz nie brzmi doskonale, jak przyjdzie plik z 10M, to co zrobisz?

Czy mi się wydaje, czy to kolejny temat dotyczący zadania rekrutacyjnego? Będziemy robić całe do końca? :)

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.