Apa itu pooling basis data?

Jawaban:

217

Kumpulan koneksi basis data adalah metode yang digunakan untuk menjaga koneksi basis data tetap terbuka sehingga dapat digunakan kembali oleh orang lain.

Biasanya, membuka koneksi database adalah operasi yang mahal, terutama jika database jauh. Anda harus membuka sesi jaringan, mengautentikasi, memeriksa otorisasi, dan sebagainya. Pooling membuat koneksi tetap aktif sehingga, ketika koneksi diminta nanti, salah satu yang aktif digunakan karena harus membuat yang lain.

Lihat diagram berikut untuk beberapa paragraf berikut:

  +---------+
  |         |
  | Clients |
+---------+ |
|         |-+  (1)   +------+   (3)    +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
|         |    |     +------+          +----------+
+---------+    |         ^
               |         | (2)
               |     /------\
               |     | Pool |
               |     \------/
           (4) |         ^
               |         | (5)
               |     +-------+   (6)   +-----------+
               #===> | Close | ======> | RealClose |
                     +-------+         +-----------+

Dalam bentuknya yang paling sederhana, itu hanya panggilan API yang mirip (1) dengan panggilan API koneksi-terbuka yang mirip dengan yang "asli". Ini pertama-tama memeriksa kumpulan untuk koneksi yang sesuai (2) dan, jika tersedia, itu diberikan kepada klien. Kalau tidak, yang baru akan dibuat (3).

"Koneksi yang sesuai" hanyalah salah satu yang sudah memiliki akses ke database menggunakan informasi yang benar (seperti contoh database, kredensial, dan mungkin hal-hal lain).

Demikian pula, ada panggilan API dekat (4) yang tidak benar-benar memanggil koneksi dekat nyata , melainkan menempatkan koneksi ke kolam (5) untuk digunakan nanti. Pada titik tertentu, koneksi di kolam mungkin benar - benar ditutup (6).

Itu penjelasan yang cukup sederhana. Implementasi nyata mungkin dapat menangani koneksi ke beberapa server dan beberapa akun pengguna, mereka dapat melakukan pra-alokasi beberapa baseline koneksi sehingga beberapa siap segera, dan mereka mungkin benar-benar menutup koneksi lama ketika pola penggunaan menjadi tenang.

paxdiablo
sumber
9
Dari mana Anda memiliki grafik kecil yang bagus?
Adrian Grigore
19
Saya membuatnya dari awal (konyol saya). Jika Anda ingin melihat beberapa grafik yang layak, lihat jawaban zengr.
paxdiablo
1
Jika ada, itu diberikan kepada klien, jika tidak yang baru dibuat. Demikian pula, ada panggilan API dekat yang tidak benar-benar memanggil koneksi dekat nyata, melainkan menempatkan koneksi ke dalam kumpulan untuk digunakan nanti. Seperti yang Anda sebutkan ini, saya punya sedikit pertanyaan. Ketika 1000 klien meminta koneksi dan tidak ditutup. Jadi 1000 koneksi hidup di kolam. Ini bagus untuk kinerja kolam ?? Dan biarkan aku tahu pengertianku sedikit salah ??
Ye Win
@YeWin, tidak ada yang terdengar bagus. Kembali pertanyaan Anda tentang 1000 koneksi yang tersisa di kolam, itu bisa terjadi tetapi umumnya hanya jika Anda berakhir di beberapa titik dengan 1000 koneksi aktif bersamaan. Kalau tidak, akan ada penggunaan kembali dan tidak akan mencapai 1000. Dalam hal itu terjadi, lihat paragraf kedua dari belakang saya, khususnya "mungkin benar-benar menutup koneksi lama ketika pola penggunaan menjadi tenang" bit.
paxdiablo
1
@DiegoMariani, lebih lambat daripada jika saya melakukannya dengan tangan, lebih cepat daripada jika saya mencoba untuk memaksa MS Word agar lebih mudah :-)
paxdiablo
105

Gambar berbicara seribu kata (paxdiablo memberikan deskripsi yang luar biasa):

teks alternatif

Sumber

zengr
sumber
35
Dan rupanya, gambar yang bagus berbicara beberapa ratus karya seni ASCII juga :-)
paxdiablo
@sagar silakan pilih jawaban yang menurut Anda paling berguna. Anda tidak memiliki catatan penerimaan.
zengr
1
Saya melihat 4 koneksi di Pool. Jadi nomor koneksi dibatasi di pool ini dengan tipe pooling? Atau apa yang akan terjadi ketika koneksi tidak gratis di Pool? Klien perlu menunggu koneksi gratis ??
Ye Win
1
@ DEADEND Ini benar-benar tergantung pada bagaimana pool koneksi diimplementasikan. Sebagian besar kumpulan membuat koneksi baru ketika koneksi mencapai kapasitas maksimal. Ini dapat terus tumbuh sampai db mencapai ambang batas. Dalam beberapa kasus (seperti oracle jdbc) Anda dapat menentukan "ukuran awal" dan "ukuran maks" selama konstruksi kolam itu sendiri.
zengr
2
Sayangnya, gambar tidak mengatakan hal yang paling penting. Yaitu: Mengapa menjaga 10, 20, 30, ... jumlah koneksi yang dibuka lebih murah untuk memori dan kinerja sistem secara keseluruhan daripada membuka satu koneksi bila diperlukan? Bagaimana itu bisa terjadi? 30 vs 1 lebih murah? Bagaimana?
Hijau
16

Seperti namanya. Jika beberapa orang ingin berenang, mereka dapat berenang di kolam renang yang sama, apakah benar-benar masuk akal untuk membangun kolam renang baru setiap kali seseorang menambahkan? Waktu dan biaya adalah prioritas.

vdegenne
sumber
7

Penggabungan koneksi basis data hanyalah caching koneksi ke basis data sehingga dapat digunakan kembali lain kali untuk mengurangi biaya membangun koneksi baru setiap kali kita ingin terhubung ke basis data.

Peter
sumber
1

Konsep Connection Pooling tidak hanya di Jawa tetapi di banyak bahasa pemrograman. Membuat objek koneksi baru itu mahal sehingga sejumlah koneksi tetap dibuat dan dipelihara dalam siklus hidup menciptakan pool virtual Java Just ( http://javajust.com/javaques.html ) lihat pertanyaan 14 pada halaman ini

Sandhya Saini
sumber