sql >> Databasteknik >  >> RDS >> Mysql

Massinsätta eller uppdatera med Hibernate?

Det finns många möjliga flaskhalsar i bulkverksamhet. Det bästa tillvägagångssättet beror mycket på hur din data ser ut. Ta en titt på Hibernate Manual avsnitt om batchbearbetning.

Se åtminstone till att du använder följande mönster (kopierat från 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();

Om du mappar en platt fil till en mycket komplex objektgraf kanske du måste bli mer kreativ, men den grundläggande principen är att du måste hitta en balans mellan att skicka bra stora bitar av data till databasen med varje spolning/bekräftelse och att undvika exploderar storleken på sessionsnivåcachen.

Slutligen, om du inte behöver Hibernate för att hantera några insamlingar eller kaskader för att din data ska infogas korrekt, överväg att använda en StatelessSession .



  1. PHP-kod för att infoga kryssrutavärde i specifik kolumn på mysql med välj formulär

  2. Kan jag använda samma begränsning för främmande nyckel i två olika tabeller?

  3. Hur uppdaterar man alla kolumner med INSERT ... ON CONFLICT ...?

  4. Hur FORMAT() fungerar i MariaDB