sql >> Database >  >> RDS >> Mysql

Bulk invoegen of updaten met Hibernate?

Er zijn veel mogelijke knelpunten in bulkoperaties. De beste aanpak hangt sterk af van hoe uw gegevens eruitzien. Bekijk de Sluimerhandleiding sectie over batchverwerking.

Zorg er in ieder geval voor dat u het volgende patroon gebruikt (overgenomen uit de handleiding):

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();

Als u een plat bestand toewijst aan een zeer complexe objectgrafiek, moet u misschien creatiever worden, maar het basisprincipe is dat u een balans moet vinden tussen het pushen van flinke brokken gegevens naar de database bij elke flush/commit en het vermijden van de grootte van de cache op sessieniveau exploderen.

Ten slotte, als u Hibernate niet nodig hebt om verzamelingen of cascadering af te handelen om uw gegevens correct in te voegen, overweeg dan om een ​​StatelessSession .



  1. Meest efficiënte manier om IP-adres op te slaan in MySQL

  2. Waarom kan ik geen alias gebruiken in een count(*)-kolom en ernaar verwijzen in een hebbende clausule?

  3. apostrof tijdens Insert (Mysql)

  4. Hoe een tagging-systeem vergelijkbaar met SO in php/mysql te implementeren?