connectionpool etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
connectionpool etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

5 Aralık 2021 Pazar

High-Performance Java Persistence | Vlad Mihalcea - Hikari Connection Pool Nasıl Çalışır?

 High-Performance Java Persistence | Vlad Mihalcea kitabı JDBC Connection Management bölümünden :


1-Çoğu connection pool çözümü, gerçek bir veritabanına özel DataSource veya temeldeki DriverManager yardımcı programını saran bir DataSource uygulaması ile olur. 
Bağlantı havuzu, istemciye fiziksel bağlantıyı döndürmez, bunun yerine bir proxy veya bir tanıtıcı sunar. 
Bir bağlantı kullanımdayken, iki eşzamanlı iş parçacığının aynı veritabanı bağlantısını kullanmasını önlemek için pool durumunu allocated olarak değiştirir. 
Proxy, bağlantı kapatma yöntemi çağrısını durdurur ve havuza bağlantı durumunu unallocated olarak değiştirmesini bildirir. 
Pooling mekanizması, bağlantı edinme süresini kısaltmanın yanı sıra, bir uygulamanın bir kerede kullanabileceği bağlantı sayısını da sınırlayabilir. Connection pool, gelen bağlantı istekleri için sınırlı bir arabellek görevi görür. 
Bir trafik artışı varsa, mevcut tüm veritabanı kaynaklarını doyurmak yerine bağlantı havuzu bunu düzenler. (Kuyruk yapısı kitapta detaylı olarak anlatılmış)






2-Coonection pool'dan connection alma şu şekilde gerçekleşir :

1. Bir bağlantı istendiğinde, havuz ayrılmamış bağlantıları arar.
2. Havuz serbest bir tane bulursa, onu cliente iletir
3. Serbest bağlantı yoksa, havuz izin verilen maksimum boyutuna ulaşmaya çalışır.
4. Havuz zaten maksimum boyutuna ulaştıysa, bir bağlantı edinme hatası istisnasıyla vazgeçmeden önce birkaç kez yeniden deneyecektir.
5. İstemci mantıksal bağlantıyı kapattığında, bağlantı serbest bırakılır ve temeldeki fiziksel bağlantıyı kapatmadan havuza geri döner.


3-Aşağıdaki test, veritabanı bağlantılarını kurma ve kapatmanın toplam ek yükünü görselleştirmek için, dört farklı RDBMS'nin 1000 veritabanı bağlantısını açıp kapatmak için geçen toplam süreyi HikariCP² (Java ekosistemindeki en hızlı bağımsız bağlantı havuzu çözümlerinden biri) ile karşılaştırır.