DBCP kedaluwarsa dan bukan tingkat produksi. Beberapa waktu lalu kami melakukan analisis di rumah dari keduanya, menciptakan perlengkapan uji yang menghasilkan beban dan konkurensi terhadap keduanya untuk menilai kesesuaian mereka dalam kondisi kehidupan nyata.
DBCP secara konsisten menghasilkan pengecualian ke dalam aplikasi pengujian kami dan berjuang untuk mencapai tingkat kinerja yang C3P0 lebih dari mampu menangani tanpa pengecualian.
C3P0 juga secara kuat menangani pemutusan DB dan transparan menghubungkan kembali pada resume sedangkan DBCP tidak pernah memulihkan koneksi jika tautan diambil dari bawahnya. Yang lebih buruk lagi, DBCP mengembalikan objek Connection ke aplikasi yang transpor dasarnya telah rusak.
Sejak itu kami telah menggunakan C3P0 dalam 4 aplikasi web konsumen berat dan tidak pernah melihat ke belakang.
UPDATE: Ternyata setelah bertahun-tahun duduk di rak, orang-orang Apache Commons telah mengeluarkan DBCP dari dormansi dan sekarang, sekali lagi, sebuah proyek yang dikembangkan secara aktif. Jadi posting asli saya mungkin kedaluwarsa.
Yang sedang berkata, saya belum mengalami kinerja perpustakaan baru yang ditingkatkan ini, juga belum mendengarnya secara de-facto dalam kerangka kerja aplikasi apa pun, belum.
Saya mengundang Anda untuk mencoba BoneCP - gratis, open source, dan lebih cepat daripada alternatif yang tersedia (lihat bagian benchmark).
Penafian: Saya penulis sehingga Anda bisa mengatakan saya bias :-)
PEMBARUAN: Sampai Maret 2010, masih sekitar 35% lebih cepat dari kumpulan baru Apache DBCP ("tomcat jdbc") yang ditulis ulang. Lihat tautan patokan dinamis di bagian patokan.
Pembaruan # 2: (Des '13) Setelah 4 tahun di atas, sekarang ada pesaing yang jauh lebih cepat: https://github.com/brettwooldridge/HikariCP
Pembaruan # 3: (Sep '14) Harap pertimbangkan BoneCP tidak digunakan lagi pada saat ini, rekomendasikan untuk beralih ke HikariCP .
Pembaruan # 4: (April '15) - Saya tidak lagi memiliki domain jolbox.com
sumber
Saya mengalami masalah dengan DBCP ketika koneksi habis sehingga saya menguji coba c3p0. Saya akan merilis ini untuk produksi tetapi kemudian mulai pengujian kinerja. Saya menemukan bahwa c3p0 tampil sangat buruk. Saya tidak bisa mengkonfigurasinya untuk bekerja dengan baik. Saya menemukannya dua kali lebih lambat dari DBCP.
Saya kemudian mencoba pooling koneksi Tomcat .
Ini dua kali lebih cepat dari c3p0 dan memperbaiki masalah lain yang saya alami dengan DBCP. Saya menghabiskan banyak waktu untuk menyelidiki dan menguji 3 kolam. Saran saya jika Anda menggunakan Tomcat adalah menggunakan kolam Tomcat JDBC baru.
sumber
Untuk masalah koneksi ulang otomatis dengan DBCP, apakah ada yang mencoba menggunakan 2 parameter konfigurasi berikut?
sumber
testOnBorrow
memiliki nilai defaulttrue
, jadi jikavalidationQuery
didefinisikan DBCP akan menguji setiap koneksi sebelum diteruskan ke aplikasi.Alternatif lain adalah HikariCP .
Berikut adalah perbandingan patokan
sumber
Telah menggunakan DBCP selama beberapa tahun sekarang dalam produksi. Itu stabil, selamat dari reboot server DB. Cukup konfigurasikan dengan benar. Ini hanya membutuhkan beberapa parameter yang ditentukan, jadi jangan malas. Berikut ini cuplikan dari kode produksi sistem kami yang mencantumkan parameter yang kami tetapkan secara eksplisit untuk membuatnya berfungsi:
sumber
Berikut adalah beberapa artikel yang menunjukkan bahwa DBCP memiliki kinerja yang jauh lebih tinggi daripada C3P0 atau Proxool. Juga dalam pengalaman saya sendiri, c3p0 memang memiliki beberapa fitur yang bagus, seperti kumpulan pernyataan yang disiapkan dan lebih dapat dikonfigurasi daripada DBCP, tetapi DBCP jelas lebih cepat di lingkungan mana pun saya menggunakannya.
Perbedaan antara dbcp dan c3p0? Sama sekali tidak ada! (Blog pengembang Sakai)
http://blogs.nyu.edu/blogs/nrm216/sakaidelic/2007/12/difference_between_dbcp_and_c3.htmlLihat juga suka ke artikel JavaTech "Connection Pool Showdown" di komentar di posting blog.
sumber
Alternatif lain, Proxool, disebutkan dalam artikel ini .
Anda mungkin dapat mengetahui mengapa Hibernate bundel c3p0 untuk implementasi kumpulan koneksi default?
sumber
Sayangnya mereka semua ketinggalan zaman. DBCP telah diperbarui sedikit baru-baru ini, dua lainnya berusia 2-3 tahun, dengan banyak bug yang beredar.
sumber
Dbcp siap produksi jika dikonfigurasi dengan benar.
Ini misalnya digunakan pada situs web perdagangan 350000 pengunjung / hari dan dengan kumpulan 200 koneksi.
Ini menangani timeout dengan sangat baik asalkan Anda mengkonfigurasinya dengan benar.
Versi 2 sedang dalam proses dan memiliki latar belakang yang membuatnya dapat diandalkan karena Banyak masalah produksi telah ditangani.
Kami menggunakannya untuk solusi server batch kami dan telah menjalankan ratusan batch yang bekerja pada jutaan baris dalam database.
Tes kinerja yang dijalankan oleh tomcat jdbc pool menunjukkan kinerja yang lebih baik daripada cp30.
sumber
Baru saja selesai membuang setengah hari dengan DBCP. Meskipun saya menggunakan rilis DBCP terbaru, saya mengalami masalah yang sama persis seperti j pimmel . Saya tidak akan merekomendasikan DBCP sama sekali, terutama itu adalah kemampuan membuang koneksi keluar dari kolam ketika DB hilang, ketidakmampuan untuk menyambung kembali ketika DB kembali dan ketidakmampuannya untuk secara dinamis menambahkan objek koneksi kembali ke kolam (itu menggantung selamanya di posting JDBCconnect I / O socket baca)
Saya beralih ke C3P0 sekarang. Saya telah menggunakannya dalam proyek-proyek sebelumnya dan itu bekerja dan tampil seperti pesona.
sumber
c3p0 bagus ketika kita menggunakan proyek mutithreading. Dalam proyek kami, kami menggunakan beberapa eksekusi utas secara bersamaan dengan menggunakan DBCP, lalu kami mendapat batas waktu koneksi jika kami menggunakan lebih banyak eksekusi utas. Jadi kami pergi dengan konfigurasi c3p0.
sumber
Alternatif yang baik dan mudah digunakan adalah DBPool .
"Utilitas penyatuan koneksi basis data berbasis Java, mendukung kedaluwarsa berbasis waktu, caching pernyataan, validasi koneksi, dan konfigurasi mudah menggunakan pool manager."
http://www.snaq.net/java/DBPool/
sumber
Kami menemukan situasi di mana kami perlu memperkenalkan koneksi pool dan kami memiliki 4 pilihan di depan kami.
Kami melakukan beberapa tes dan perbandingan berdasarkan kriteria kami dan memutuskan untuk mengikuti HikariCP. Baca artikel ini yang menjelaskan mengapa kami memilih HikariCP.
sumber
Untuk Menerapkan C3P0 dengan cara terbaik maka periksa jawaban ini
C3P0 :
Untuk aplikasi perusahaan, C3P0 adalah pendekatan terbaik. C3P0 adalah pustaka yang mudah digunakan untuk menambah driver JDBC (berbasis DriverManager) tradisional dengan JNDI-bindable DataSources, termasuk DataSources yang mengimplementasikan Connection and Statement Pooling, seperti yang dijelaskan oleh spesifikasi jdbc3 dan ekstensi jdbc2 std. C3P0 juga secara kuat menangani pemutusan DB dan transparan menghubungkan kembali pada resume sedangkan DBCP tidak pernah memulihkan koneksi jika tautan diambil dari bawahnya.
Jadi inilah mengapa c3p0 dan kumpulan koneksi lain juga telah menyiapkan cache pernyataan - ini memungkinkan kode aplikasi untuk menghindari berurusan dengan semua ini. Pernyataan biasanya disimpan dalam kumpulan LRU terbatas, sehingga pernyataan umum menggunakan kembali contoh PreparedStatement.
Yang lebih buruk lagi, DBCP mengembalikan objek Connection ke aplikasi yang transpor dasarnya telah rusak. Kasus penggunaan umum untuk c3p0 adalah mengganti kumpulan koneksi DBCP standar yang disertakan dengan Apache Tomcat. Sering kali, seorang programmer akan mengalami situasi di mana koneksi tidak didaur ulang dengan benar di kumpulan koneksi DBCP dan c3p0 adalah pengganti yang berharga dalam kasus ini.
Dalam pembaruan terkini, C3P0 memiliki beberapa fitur cemerlang. itu diberikan di bawah ini:
Di sini, max dan min poolsize menentukan batas-batas koneksi yang berarti bagaimana koneksi minimum dan maksimum yang akan diambil aplikasi ini.
MaxIdleTime()
tentukan kapan akan melepaskan koneksi idle.DBCP :
Pendekatan ini juga bagus tetapi memiliki beberapa kelemahan seperti koneksi timeout dan koneksi realeasing. C3P0 baik ketika kita menggunakan proyek mutithreading. Dalam proyek kami, kami menggunakan beberapa eksekusi utas secara bersamaan dengan menggunakan DBCP, lalu kami mendapat batas waktu koneksi jika kami menggunakan lebih banyak eksekusi utas. Jadi kami pergi dengan konfigurasi c3p0. Saya tidak akan merekomendasikan DBCP sama sekali, terutama itu adalah kemampuan membuang koneksi keluar dari kolam ketika DB hilang, ketidakmampuan untuk menyambung kembali ketika DB kembali dan ketidakmampuannya untuk secara dinamis menambahkan objek koneksi kembali ke kolam (itu menggantung selamanya di posting JDBCconnect I / O socket baca)
Terima kasih :)
sumber
rekomendasi saya adalah
hikari> druid> UCP> c3p0> DBCP
Ini didasarkan pada apa yang saya uji - 20190202, di lingkungan pengujian lokal saya (4GB mac / mysql di docker / pool minSize = 1, maxSize = 8), hikari dapat melayani 1024 utas x 1024 kali untuk mendapatkan koneksi, waktu rata-rata untuk setiap utas untuk menyelesaikan adalah 1 atau 2 juta detik, sedangkan c3p0 hanya dapat melayani 256 utas x 1024 kali dan waktu rata-rata untuk setiap utas sudah 21 juta detik. (512 utas gagal).
sumber