PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách hiệu quả nhất để duy trì hàng nghìn thực thể là gì?

Bạn phải sử dụng chèn hàng loạt.

  1. Tạo giao diện cho kho lưu trữ tùy chỉnh SomeRepositoryCustom
public interface SomeRepositoryCustom {

    void batchSave(List<Record> records);

}
  1. Tạo triển khai 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. Mở rộng JpaRepository của bạn với SomeRepositoryCustom
@Repository
public interface SomeRepository extends JpaRepository, SomeRepositoryCustom {

}

để tiết kiệm

someRepository.batchSave(records);

Ghi chú

Hãy nhớ rằng, nếu bạn thậm chí đang sử dụng chèn hàng loạt, trình điều khiển cơ sở dữ liệu sẽ không sử dụng chúng. Ví dụ:đối với MySQL, cần thêm một tham số rewriteBatchedStatements=true đến URL cơ sở dữ liệu. Vì vậy, tốt hơn là bật ghi nhật ký SQL trình điều khiển (không phải Hibernate) để xác minh mọi thứ. Cũng có thể hữu ích để gỡ lỗi mã trình điều khiển.

Bạn sẽ cần phải đưa ra quyết định về việc chia nhỏ các bản ghi theo các gói trong vòng lặp

    for (Record record : records) { 

    }

Một người lái xe có thể làm điều đó cho bạn, vì vậy bạn sẽ không cần nó. Nhưng tốt hơn hết bạn nên gỡ lỗi điều này.

P. S. Không sử dụng var ở khắp mọi nơi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tách mảng 2d thành mảng 1d một cách nhanh chóng trong PostgreSQL?

  2. psycopg2:chèn nhiều hàng với một truy vấn

  3. Sử dụng regex ở WHERE trong Postgres

  4. Sử dụng .pgpass từ Apache libphp5.so

  5. Sử dụng LENGTH (cột được tính) trong ORDER BY trong Postgres sql