sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad er den mest effektive måde at fortsætte tusindvis af enheder på?

Du skal bruge batch-indlæg.

  1. Opret en grænseflade til et brugerdefineret lager SomeRepositoryCustom
public interface SomeRepositoryCustom {

    void batchSave(List<Record> records);

}
  1. Opret en implementering af 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. Udvid dit JpaRepository med SomeRepositoryCustom
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {

}

for at gemme

someRepository.batchSave(records);

Noter

Husk, at hvis du overhovedet bruger batch-indsættelser, vil databasedriveren ikke bruge dem. For MySQL er det f.eks. nødvendigt at tilføje en parameter rewriteBatchedStatements=true til database URL. Så bedre at aktivere driver SQL-logning (ikke Hibernate) for at verificere alt. Kan også være nyttig til at fejlsøge driverkode.

Du bliver nødt til at træffe beslutning om at opdele poster efter pakker i løkken

    for (Record record : records) { 

    }

En chauffør kan gøre det for dig, så du får ikke brug for det. Men bedre at fejlsøge denne ting også.

P. S. Brug ikke var overalt.




  1. Tilføj et jobtrin til et eksisterende SQL Server Agent-job (T-SQL)

  2. Tilføjelse af et indledende nul til nogle værdier i kolonne i MySQL

  3. Implementering af en meget tilgængelig Nextcloud med MySQL Galera Cluster og GlusterFS

  4. Tildel dynamisk alias til alle feltnavne i msyql-forespørgsel