sql >> Database >  >> RDS >> PostgreSQL

Wat is de meest efficiënte manier om duizenden entiteiten te behouden?

U moet batch-bijlagen gebruiken.

  1. Maak een interface voor een aangepaste repository SomeRepositoryCustom
public interface SomeRepositoryCustom {

    void batchSave(List<Record> records);

}
  1. Maak een implementatie van SomeRepositoryCustom
@Repository
class SomesRepositoryCustomImpl implements SomeRepositoryCustom {

    private JdbcTemplate template;

    @Autowired
    public SomesRepositoryCustomImpl(JdbcTemplate template) {
        this.template = template;
    }

    @Override
    public void batchSave(List<Record> records) {
        final String sql = "INSERT INTO RECORDS(column_a, column_b) VALUES (?, ?)";

        template.execute(sql, (PreparedStatementCallback<Void>) ps -> {
            for (Record record : records) {
                ps.setString(1, record.getA());
                ps.setString(2, record.getB());
                ps.addBatch();
            }
            ps.executeBatch();
            return null;
        });
    }

}
  1. Verleng uw JpaRepository met SomeRepositoryCustom
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {

}

om op te slaan

someRepository.batchSave(records);

Opmerkingen

Houd er rekening mee dat, zelfs als u batch-inserts gebruikt, het databasestuurprogramma deze niet zal gebruiken. Voor MySQL is het bijvoorbeeld nodig om een ​​parameter toe te voegen rewriteBatchedStatements=true naar database-URL. Dus het is beter om SQL-logboekregistratie van stuurprogramma's (niet Hibernate) in te schakelen om alles te verifiëren. Kan ook handig zijn om stuurprogrammacode te debuggen.

U moet een beslissing nemen over het splitsen van records door pakketten in de lus

    for (Record record : records) { 

    }

Een chauffeur kan het voor u doen, dus u heeft het niet nodig. Maar het is ook beter om dit ding te debuggen.

P.S. Gebruik var niet overal.




  1. Django DateRangeField-probleem

  2. Rijen extraheren uit een database inclusief afhankelijke rijen

  3. MySQL-equivalent van de dblink-module van PostgreSQL?

  4. heroku pull postgresql op windows