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

Sisipkan lambat di PostgreSQL menggunakan JDBC

Tampaknya ini adalah kombinasi dari "bug" Spring dan "bug" driver.

Spring mencoba menentukan tipe data kolom setiap kali setValue() disebut. Ia melakukannya dengan memanggil PreparedStatementMetaData.getParameterMetaData()

Ini tampaknya menyebabkan pernyataan "siapkan" dikirim ke database yang cukup cepat (tidak pernah lebih dari 1 ms di laptop saya) tetapi seperti yang dipanggil untuk setiap kolom untuk setiap baris ini meringkas banyak waktu (ini dipanggil untuk setiap nilai bukan-null yang menghasilkan sekitar 23.000 panggilan)

Sampai batas tertentu ini lebih merupakan bug Musim Semi daripada bug driver karena tidak menyimpan data meta parameter tidak masuk akal (setidaknya menurut saya). Driver MySQL JDBC tidak mendukung getParameterMetaData() dan Spring tahu ini dan "bug" ini tidak muncul dengan MySQL karena pegas tidak pernah memanggil metode itu.

Saya tidak yakin apakah perilaku driver JDBC Postgres dapat diklasifikasikan sebagai bug, tetapi akan lebih baik jika driver menyimpan meta data tersebut setelah panggilan pertama.

Pegas dapat diyakinkan untuk tidak memperoleh data meta pernyataan melalui properti spring.jdbc.getParameterType.ignore

Jadi dengan meletakkan:

System.setProperty("spring.jdbc.getParameterType.ignore", "true");

sebelum baris:

LetsGo letsGo = new LetsGo();

perilaku ini dinonaktifkan.

Properti harus disetel sebelum Musim semi diinisialisasi.

Ketika saya melakukannya dengan proyek sampel Anda, penyisipan berjalan dalam 500 mdtk di laptop saya.

Sunting

Setelah melihat komentar mengenai penggunaan driver Postgres-NG, saya menggali sumber driver "resmi" dan driver NG, dan driver NG melakukan cache parameter meta data setelah panggilan pertama sedangkan driver resmi tidak yang menjelaskan mengapa menggunakan driver NG jauh lebih cepat (tanpa menonaktifkan panggilan di Spring)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat mengakses metode instance Sequelize

  2. Periksa apakah ada baris atau tidak di postgresql

  3. Apa yang terjadi dengan duplikat saat menyisipkan banyak baris?

  4. Pola &Pengubah Template untuk Pemformatan Numerik di PostgreSQL

  5. memulai postgresql dan pgadmin di windows tanpa instalasi