Veritabanı havuzu nedir?


Yanıtlar:


217

Veritabanı bağlantı havuzu, veritabanı bağlantılarını açık tutmak ve böylece başkaları tarafından yeniden kullanılmalarını sağlamak için kullanılan bir yöntemdir.

Tipik olarak, bir veritabanı bağlantısını açmak, özellikle veritabanı uzaktaysa pahalı bir işlemdir. Ağ oturumlarını açmalı, kimlik doğrulamalı, yetkilendirmeyi kontrol ettirmeli vb. Havuzlama, bağlantıları aktif tutar, böylece daha sonra bir bağlantı istendiğinde, başka bir bağlantı oluşturmak yerine aktif olanlardan biri kullanılır.

Sonraki birkaç paragraf için aşağıdaki şemaya bakın:

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

En basit şekliyle, "gerçek" olana benzer bir açık bağlantı API çağrısına benzer bir API çağrısı (1). Bu, önce havuzu uygun bir bağlantı için kontrol eder (2) ve eğer varsa, bu müşteriye verilir. Aksi takdirde yeni bir tane oluşturulur (3).

Bir "Uygun bağlantı" sadece zaten biridir vardır (örneğin veritabanı örneği, kimlik bilgileri ve muhtemelen başka şeyler gibi) doğru bilgileri kullanarak veritabanına erişimi.

Benzer şekilde, gerçekte gerçek yakın bağlantıyı çağırmayan bir yakın API çağrısı (4) vardır, bunun yerine bağlantıyı daha sonra kullanmak üzere havuza (5) koyar. Bir noktada, havuzdaki bağlantılar gerçekten kapatılabilir (6).

Bu oldukça basit bir açıklama. Gerçek uygulamalar, birden çok sunucuya ve birden çok kullanıcı hesabına bağlantıları idare edebilir, bağlantıların bazı temellerini önceden tahsis edebilirler, böylece bazıları hemen hazır olur ve kullanım modeli sakinleştiğinde aslında eski bağlantıları kapatabilirler.


9
Güzel küçük grafiği nereden aldın?
Adrian Grigore

19
Sıfırdan yaptım (aptal ben). İyi grafikler görmek istiyorsanız, zengr'in cevabına bir göz atın.
paxdiablo

1
Biri mevcutsa, müşteriye verilir, aksi takdirde yeni bir tane oluşturulur. Benzer şekilde, gerçekte gerçek yakın bağlantıyı çağırmayan bir yakın API çağrısı vardır, bunun yerine bağlantıyı daha sonra kullanmak üzere havuza koyar. Bundan bahsettiğiniz gibi, küçük bir sorum var. 1000 müşteri bağlantı istediğinde ve kapatılmadığında. Yani havuzda 1000 bağlantı canlı. Bu havuz performansı için iyi olacak mı ?? Ve anlayışımın biraz yanlış olduğunu bilmeme izin ver ??
Ye Win

@YeWin, hayır, kulağa hoş geliyor. Havuzda kalan 1000 bağlantı hakkındaki sorunuza bakın, bu olabilir, ancak genellikle yalnızca bir noktada 1000 eşzamanlı etkin bağlantıyla sonuçlanırsanız. Aksi takdirde, yeniden kullanım olacak ve 1000'e ulaşmayacaktır. Bunun olması açısından, sondan bir önceki paragrafıma bakın, özellikle "kullanım düzeni sakinleştiğinde eski bağlantıları gerçekten kapatabilir" biti.
paxdiablo

1
@DiegoMariani, ben elle yapmış olsaydı daha yavaş, daha hızlı bir şekilde ben yapım içine MS Word zorlamak için çalışacaktı :-) daha kolay
paxdiablo

105

Görüntüler bin kelimeden bahsediyor (paxdiablo harika bir açıklama yaptı):

alternatif metin

Kaynak


35
Ve görünüşe göre, iyi görüntüler birkaç yüz ASCII sanatını da
anlatıyor

@sagar lütfen en yararlı bulduğunuz yanıtı seçin. Kabul kaydınız yok.
zengr

1
Havuzda 4 bağlantı gördüm yani bu havuzda havuz türüne göre bağlantı numarası kısıtlı mı yoksa havuzda bağlantı serbest olmadığında ne olacak? İstemcinin bağlantı ücretsiz beklemesi mi gerekiyor?
Siz

1
@DEADEND Bu gerçekten bağlantı havuzunun nasıl uygulandığına bağlı. Havuzların çoğu, bağlantılar maksimum kapasiteye ulaştığında yeni bir bağlantı oluşturur. Bu, db bir eşiğe ulaşana kadar büyümeye devam edebilir. Bazı durumlarda (oracle jdbc gibi) havuz yapımı sırasında "başlangıç ​​boyutu" ve "maksimum boyut" belirtebilirsiniz.
zengr

2
Maalesef, görüntü en önemli şeyi söylemiyor. Yani: 10, 20, 30, ... bağlantı sayısını açık tutmak, bellek ve genel sistem performansı için gerektiğinde tek bir bağlantı açmaya göre neden daha az maliyetli? Nasıl olabilir? 30'a 1 daha mı az maliyetli? Nasıl?
Yeşil

16

Adından da anlaşılacağı gibi. Birkaç kişi yüzmek isterse, aynı yüzme havuzunda yüzebilir, her seferinde yeni bir yüzme havuzu yapmak gerçekten mantıklı mı? Zaman ve maliyet önceliklidir.


7

Veritabanı bağlantı havuzu, bir sonraki sefer bir veritabanına bağlanmak istediğimizde yeni bir bağlantı kurmanın maliyetini azaltmak için yeniden kullanılabilmeleri için veritabanlarına yapılan bağlantıları önbelleğe almaktır.



1

Bağlantı Havuzu oluşturma kavramı yalnızca Java'da değil, birçok programlama dilinde. Yeni bir bağlantı nesnesi oluşturmak maliyetlidir, bu nedenle yaşam döngüsünde sabit sayıda bağlantı yapılır ve korunur, bir sanal havuz oluşturulur Java Sadece ( http://javajust.com/javaques.html ) bu sayfadaki 14. soruya bakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.