PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Кой е най-ефективният начин за запазване на хиляди обекти?

Трябва да използвате групови вмъквания.

  1. Създаване на интерфейс за персонализирано хранилище SomeRepositoryCustom
public interface SomeRepositoryCustom {

    void batchSave(List<Record> records);

}
  1. Създайте внедряване на 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. Разширете своето JpaRepository с SomeRepositoryCustom
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {

}

за запазване

someRepository.batchSave(records);

Бележки

Имайте предвид, че дори ако използвате партидни вмъквания, драйверът на базата данни няма да ги използва. Например за MySQL е необходимо да добавите параметър rewriteBatchedStatements=true към URL на базата данни. Затова е по-добре да активирате SQL регистрирането на драйвера (не Hibernate), за да проверите всичко. Също така може да бъде полезно за отстраняване на грешки в кода на драйвера.

Ще трябва да вземете решение относно разделянето на записите по пакети в цикъла

    for (Record record : records) { 

    }

Шофьор може да го направи вместо вас, така че няма да ви трябва. Но по-добре да отстраните грешки и това нещо.

P. S. Не използвайте var навсякъде.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Amazon Aurora PostgreSQL SELECT INTO OUTFILE S3

  2. Актуализирайте всеки ред с произволна дата и час между две дати

  3. Замяна на серийна последователност в PostgreSql с Entity Framework (C#)

  4. Свързване към Heroku Postgres база данни с Asp.Net

  5. Вмъкване на тригер за актуализиране на друга таблица с помощта на PostgreSQL