2011-06-22 12 views
14

Próbuję użyć puli połączeń, ale nie rozumiem tego poprawnie. Kto to implementuje? Oprogramowanie, sterownik czy baza danych?Jak utworzyć pulę połączeń PostgreSQL za pomocą Java?

Jak mogę uruchomić program przy użyciu puli połączeń? Używam macierzystego sterownika PostgreSQL.

Potrzebuję przykład kodu. Robię webcrawlera i ma wiele połączeń z bazą danych.

+0

Co wykorzystałeś w końcu? – Arya

Odpowiedz

16

Istnieje kilka możliwości:

Bez względu na wybraną opcję, w zasadzie zawsze działa w ten sam sposób: klient utrzymuje pulę połączeń sieciowych z bazą danych. Za każdym razem, gdy żądasz nowego połączenia za pomocą DataSource, pula połączeń będzie szukała darmowego połączenia i da ci to. Kiedy myślisz, że zamykasz połączenie, zostanie ono faktycznie zwolnione i umieszczone w puli. Inny wątek może teraz używać tego samego, już ustanowionego połączenia.

Pooling ma wiele zalet:

  • nie ma narzut połączenia TCP/IP, zezwolenia itp - to jest wykonywane tylko raz.

  • basen zadba o zerwanych połączeń, może również sprawdzić połączenia przed podaniem go do ciebie

  • wreszcie liczba aktywnych połączeń z bazą danych jest bardziej stabilny, basen połączenie powinno odmówić powrotu połączenia, jeśli masz już otwarte zbyt wiele:

+0

Dzięki, stary. Teraz wiem nieco więcej o puli połączeń. Próbuję wdrożenia DBCP. Przyjrzyjmy się dokumentom PosgreSQL, ale sugeruję, że implementacja nie jest najlepsza na świecie. Obecnie wdrożenie z DBCP wydaje się obiecujące. –

+0

DBCP 1.4 to mądry wybór, cieszę się, że mogłem pomóc. –

0

Myślę, że poszukujesz łączenia puli po stronie klienta, które łączy się z bazą danych. Podstawową ideą jest to, że ustanowienie nowego połączenia jest kosztowne, ponieważ wymaga skonfigurowania połączenia, ustawienia obiektów po stronie DB, uwierzytelniania itp., A zatem ponownego wykorzystania obiektów połączenia.

1

Sama konsolidacja odbywa się za pomocą kodu znajdującego się między kodem aplikacji a sterownikiem bazy danych.

Kto umieszcza tam ten kod? Może być kimkolwiek. To Ty możesz - są biblioteki takie jak DBCP, które twój kod mógłby użyć, aby umieścić pulę na bazie danych. Może to być kontener J2EE, taki jak Tomcat lub JBoss. Może to być nawet baza danych - jak zauważa Tomasz, PostgreSQL zawiera kod łączący.

Wygląda na to, że nie korzystasz z kontenera J2EE, w takim przypadku jest on przeznaczony dla Ciebie lub bazy danych. Osobiście wolałbym dedykowaną implementację puli, jak DBCP, nad jedną dostarczoną przez bazę danych.Programiści bazy danych najbardziej dbają o bazę danych; programiści basenu najbardziej dbają o pulę.

Zdobądź DBCP (IMHO, lepiej niż alternatywy) i użyj tego.

Powiązane problemy