Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hibernate, JDBC dan kinerja Java pada set hasil menengah dan besar

Bisakah Anda melakukan tes asap dengan kueri sesederhana mungkin seperti:

SELECT current_timestamp()

atau

SELECT 1 + 1

Ini akan memberi tahu Anda berapa overhead driver JDBC yang sebenarnya. Juga tidak jelas apakah kedua pengujian dilakukan dari mesin yang sama.

Jalankan kueri yang sama beberapa ribu kali di Java. JVM membutuhkan waktu untuk pemanasan (pemuatan kelas, JIT). Saya juga berasumsi SimpleJDBC.getConnection() menggunakan penyatuan koneksi C3P0 - biaya pembuatan koneksi cukup tinggi sehingga beberapa eksekusi pertama bisa lambat.

Juga lebih suka kueri bernama daripada kueri ad-hoc atau kueri kriteria.

Hibernate adalah kerangka kerja yang sangat kompleks. Seperti yang Anda lihat, ini menghabiskan 75% dari keseluruhan waktu eksekusi dibandingkan dengan JDBC mentah. Jika Anda membutuhkan ORM mentah (tanpa pemuatan lambat, pemeriksaan kotor, caching lanjutan), pertimbangkan mybatis . Atau bahkan mungkin JdbcTemplate dengan RowMapper abstraksi.

Tidak juga. Lihat Bab 19. Meningkatkan kinerja dalam dokumentasi Hibernasi. Ada banyak refleksi terjadi di luar sana + generasi kelas. Sekali lagi, Hibernate mungkin bukan solusi terbaik saat Anda ingin memeras setiap milidetik dari database Anda.

Namun ini adalah pilihan yang baik ketika Anda ingin meningkatkan pengalaman pengguna secara keseluruhan karena dukungan caching yang ekstensif. Lihat kinerja dok lagi. Ini sebagian besar berbicara tentang caching. Ada cache tingkat pertama, cache tingkat kedua, cache kueri... Ini adalah tempat di mana Hibernate mungkin benar-benar mengungguli JDBC sederhana - ia dapat menyimpan banyak cache dengan cara yang bahkan tidak dapat Anda bayangkan. Di sisi lain - konfigurasi cache yang buruk akan menyebabkan penyiapan yang lebih lambat.

Lihat:Caching dengan Hibernate + Spring - beberapa Pertanyaan!

JVM (terutama di server konfigurasi) cukup cepat. Pembuatan objek di heap secepat di stack di mis. C, pengumpulan sampah telah sangat dioptimalkan. Saya tidak berpikir versi Java yang menjalankan JDBC biasa akan jauh lebih lambat dibandingkan dengan koneksi yang lebih asli. Itulah mengapa saya menyarankan beberapa peningkatan pada tolok ukur Anda.

Saya percaya bahwa JDBC adalah pilihan yang baik jika kinerja adalah masalah terbesar Anda. Java telah berhasil digunakan di banyak aplikasi database-berat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tampilan hari melalui prosedur tersimpan

  2. prosedur di mysql

  3. Ambil data untuk beberapa single atau referensi tanpa operator sejenis

  4. UPDATE tabel MySQl sederhana dari array php

  5. Pencarian lambat dengan kueri indeks LIKE% MYSQL