sql >> Databáze >  >> RDS >> Mysql

Hromadné vložení nebo aktualizace pomocí Hibernate?

V hromadných operacích existuje mnoho možných úzkých míst. Nejlepší přístup do značné míry závisí na tom, jak vaše data vypadají. Podívejte se na příručku Hibernate část o dávkovém zpracování.

Minimálně se ujistěte, že používáte následující vzor (zkopírovaný z manuálu):

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

Pokud mapujete plochý soubor na velmi složitý objektový graf, možná budete muset být kreativnější, ale základním principem je, že musíte najít rovnováhu mezi vkládáním velkých kusů dat do databáze při každém vyprázdnění/potvrzení a vyvarováním se rozšíření velikosti mezipaměti na úrovni relace.

A konečně, pokud nepotřebujete Hibernate ke zpracování jakýchkoli kolekcí nebo kaskádování, aby vaše data byla správně vložena, zvažte použití StatelessSession .



  1. Oprávnění odepřeno při pokusu o import souboru CSV z PGAdmin

  2. pdo lastInsertId vrací nulu (0)

  3. Web2py – Migrace z SQLite na MySQL

  4. Jak spustit skript .sql z bash