sql >> Database teknologi >  >> RDS >> Mysql

Masseindsætte eller opdatere med Hibernate?

Der er mange mulige flaskehalse i bulkoperationer. Den bedste tilgang afhænger i høj grad af, hvordan dine data ser ud. Tag et kig på Hibernate Manual afsnit om batchbehandling.

Sørg som minimum for, at du bruger følgende mønster (kopieret fra manualen):

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
}

tx.commit();
session.close();

Hvis du kortlægger en flad fil til en meget kompleks objektgraf, skal du muligvis være mere kreativ, men det grundlæggende princip er, at du skal finde en balance mellem at skubbe store bidder af data til databasen med hver flush/commit og undgå eksploderer størrelsen af ​​sessionsniveaucachen.

Til sidst, hvis du ikke har brug for Hibernate til at håndtere indsamlinger eller cascading for at dine data kan indsættes korrekt, kan du overveje at bruge en StatelessSession .



  1. Er der nogen grund til at bekymre sig om kolonnerækkefølgen i en tabel?

  2. Hvordan kan jeg gemme adgangskoden sikkert i MySQL og autentificere til eksterne tjenester

  3. en permanent måde at gøre mysqli->set_charset() på?

  4. Gratis webhosting med PHP-support