PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jaki jest najskuteczniejszy sposób na przetrwanie tysięcy podmiotów?

Musisz użyć wstawek wsadowych.

  1. Utwórz interfejs dla niestandardowego repozytorium SomeRepositoryCustom
public interface SomeRepositoryCustom {

    void batchSave(List<Record> records);

}
  1. Utwórz implementację 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. Rozszerz swoje JpaRepository z SomeRepositoryCustom
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {

}

zapisać

someRepository.batchSave(records);

Notatki

Pamiętaj, że nawet jeśli używasz wstawek wsadowych, sterownik bazy danych nie będzie ich używał. Na przykład dla MySQL konieczne jest dodanie parametru rewriteBatchedStatements=true do adresu URL bazy danych. Lepiej więc włączyć logowanie sterownika SQL (nie hibernację), aby wszystko zweryfikować. Może być również przydatny do debugowania kodu sterownika.

Musisz podjąć decyzję o podzieleniu rekordów na pakiety w pętli

    for (Record record : records) { 

    }

Kierowca może to zrobić za Ciebie, więc nie będziesz tego potrzebować. Ale lepiej też to debugować.

PS Nie używaj var wszędzie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak rozwiązać problem AWS RDS:psycopg2.OperationalError:FATAL:uwierzytelnianie hasła nie powiodło się dla użytkownika root

  2. Czy tablica zawiera wszystkie wartości NULL w PostgreSQL

  3. Czy mogę pisać funkcje PostgreSQL w Ruby on Rails?

  4. Utrzymywanie postgresów całkowicie w pamięci

  5. Jak ustawić wartość limitu czasu połączenia dla pgAdmin?