Bir web projesi yapıyorum. Database connection işlemi için connection pool kullanmanın önemi ve yararı nedir? Normal database’e bağlantısından farkı nedir? Ve nasıl connection pooling yapılabilir?
comments
4 references
// Comments are closed.
Aslında öncelikle Pooling kavramını önce anlamak gerekir.
Pooling, kısaca programın çalışma anında yaratılması ve çalışmaya hazır hale getirilmesi uzun süren tarzda sınıflar için daha önceden yaratılarak bir veri yapısı yardımıyla (list, hash vb.) tutulan ve oradan yönetilen nesleler havuzu denilebilir.
ConnectionPooling sanıyorum en bilinenlerinden birisidir.
Buna değinmek gerekirse, bir db bağlantısı kurmak arada network işlemlerinin olduğu için, özellikle network hızı düşükse zaman alan bir süreç haline gelir. Network hızının düşük olması durumunda her bir işlem için bir sn kadar sürme ihtimali var. Bunun haricinde eğer belirlenen bir zamanda bağlantı sağlanamazsa bu sefer zaman aşımına uğrayıp kurulamama ihtimali de var. Böyle bir durumda site veya uygulama hızlı ve akıcı bir şekilde çalışamayacak. Bu gibi durumlar için uygulama ayağa kalkarken veya uygun görünen bir anda belirli sayıda bağlantı oluşturulup bir veriyapısı üzerinde bekletilir. İhtiyaç oldukça alınıp kullanılır ve aynı yapıya geri bırakılır.
Aynı yapı ThreadPool kullanımlarında da görünür.
İyi çalışmalar.
Uygulamalardan DB’ye iki türlü bağlanabilirsiniz. Bu sizin uygulama yapınızla ilgilidir.
Birinci olarak fiziksel direk bağlantı ile bağlanırsınız. Bu durumda uygulama ile db arasında direk iletişim kurulur ve arada herhangi bir katman olmaksızın bağlanır. Bu durumda db işlemlerindeki her istekte, veritabanına yeni bir bağlantı isteği oluşturulur. Bu istekler hem veritabanı için hem de uygulama için maliyetli bir iştir. Özellikle dinamik bir uygulamanız varsa, her seferinde yeni bir bağlantı kurma isteği performans sorunu oluşturacaktır. ayrıca açılan her bağlantının kapatılması da yine performans ve güvenlik sorunudur.
İkinci olarak uygulamanızda bir connection pool ( bağlantı havuzu) oluşturarak, DB işlemlerini bu havuz üzerinden halledebilirsiniz. Bu durumda veritabanı ile uygulama arasına yeni bir katman koymuş olursunuz. Bu katman sizin yerinize bir çok işlemi otomatik yapabilir. herhangi bir veritabanı işleminde bağlantı havuzundan alacağınız hazır bir bağlantıyı kullanırsınız. Böylelikle yeni bağlantı açmak için kaynak ve zaman harcamazsınız. Yine bu havuz vasıtasıyle bir çok güvenlik sorununu otomatik halletmiş olursunuz.
Connection Pool ile ilgili bir çok hazır kütüphane var, bunları araştırarak uygulamalarınızda kullanabilirsiniz. yine uzman yazılımcı arkadaşlarımız burda size kütüphanelerle ve nasıl kullanıldıklarıyla ilgili yardımcı olacaktır diye düşünüyorum.
Selam
Bu Cache gibi bir yapı mı?
sorum basitse özür dilerim.
yok ne demek basit değil tabiki. belki tam anlatamamış da olabilirim.
Connection Pool’da kesinlikle Data anlamında bir cacheleme durumu söz konusu değil. Sadece belki bağlantıyı cacheliyor, elinde tutuyor diyebiliriz. Uygulamanız bir veritabanı işlemi yapacağında, veritabanına yeni bağlantı açmıyor, connection pool üzerinden, mevcut hali hazırda veritabanına açılmış olan hazır bağlantılardan birini kullanıyor. Böylelikle yeniden bağlantı kurma maliyeti olmamış oluyor.