PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apa cara paling efisien untuk mempertahankan ribuan entitas?

Anda harus menggunakan sisipan batch.

  1. Buat antarmuka untuk repositori khusus SomeRepositoryCustom
public interface SomeRepositoryCustom {

    void batchSave(List<Record> records);

}
  1. Buat implementasi 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. Perpanjang JpaRepository Anda dengan SomeRepositoryCustom
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {

}

untuk menyimpan

someRepository.batchSave(records);

Catatan

Ingatlah bahwa, jika Anda bahkan menggunakan sisipan batch, driver database tidak akan menggunakannya. Misalnya, untuk MySQL, perlu menambahkan parameter rewriteBatchedStatements=true ke URL database. Jadi lebih baik mengaktifkan driver SQL logging (bukan Hibernate) untuk memverifikasi semuanya. Juga berguna untuk men-debug kode driver.

Anda perlu membuat keputusan untuk memisahkan record berdasarkan paket dalam loop

    for (Record record : records) { 

    }

Pengemudi dapat melakukannya untuk Anda, jadi Anda tidak akan membutuhkannya. Tapi lebih baik untuk men-debug hal ini juga.

P. S. Jangan gunakan var di mana-mana.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan koneksi SSL PostgreSQL dengan sertifikat yang ditandatangani sendiri

  2. Bagaimana cara memilih id dengan grup tanggal maksimum berdasarkan kategori di PostgreSQL?

  3. Bagaimana cara melewatkan catatan sebagai parameter untuk fungsi PL/pgSQL?

  4. Postgres bersarang jika dalam kasus permintaan

  5. Menggunakan SQL sebagai xlookup