2010-09-22 12 views
6

Moja strona zawsze korzystała z trwałych połączeń, w oparciu o moje zrozumienie ich nie ma powodu, aby tego nie robić. Dlaczego warto zamknąć połączenie, gdy można je ponownie wykorzystać? Mam witrynę, która w sumie ma dostęp do około 7 baz danych. To nie jest wielka witryna ruchu, ale jest wystarczająco duża. Jakie jest Twoje podejście do uporczywości, czy powinienem ich używać?Trwałe vs nietrwałe - Którą powinienem użyć?

Odpowiedz

9

Przy trwałych połączeń:

  • Nie można budować przetwarzania transakcji skutecznie
  • niemożliwych sesji użytkowników na tym samym połączeniu
  • aplikacji nie są skalowalne. Z czasem może być konieczne jego rozszerzenie i będzie wymagało zarządzania/śledzenia trwałych połączeń
  • , jeśli skrypt, z jakiegokolwiek powodu, nie może zwolnić blokady na stole, wszystkie poniższe skrypty zostaną zablokowane na czas nieokreślony i należy ponownie uruchomić serwer db. Korzystając z transakcji, blok transakcji przechodzi również do następnego skryptu (przy użyciu tego samego połączenia), jeśli wykonywanie skryptu zakończy się przed zakończeniem bloku transakcji, itp.

Połączenia trwałe nie przynoszą niczego, co można zrobić w przypadku nietrwałych połączeń .
Dlaczego więc w ogóle z nich korzystać?
Jedynym możliwym powodem jest wydajność, aby z nich korzystać, gdy narzut tworzenia łącza do serwera SQL jest wysoki. A to zależy od wielu czynników, takich jak:

  • typu bazy danych
  • czy serwer MySQL na tej samej maszynie, a jeśli nie, to w jakim stopniu? może być poza Twoją lokalną siecią/domeną?
  • ile przeciążony przez inne procesy maszyna, na której siedzi MySQL

zawsze może zastąpić stałe połączenia z non-trwałych połączeń. Może to zmienić wydajność skryptu, ale nie jego zachowanie!

komercyjna RDMS może być licencjonowane przez liczbę jednoczesnych połączeń otwartych i tutaj utrzymujących połączenia mogą misserve

+0

+1 za info na MySQL nie jest darmowy do użytku komercyjnego. Zastanawiam się, ilu ludzi nie zdaje sobie z tego sprawy. Chociaż płatna licencja jest dość tania. – NotMe

+0

bzdura Nie wiedziałem, że ... Będę musiał się nad tym zastanowić, dzięki. – Webnet

+0

Czy istnieje sposób, w jaki można śledzić narzut nawiązywania/zamykania połączeń? Otrzymuję błędy obejmujące zbyt wiele połączeń, więc zastanawiam się, czy trwałe jest częścią problemu. Kiedy mówisz o transakcjach, co masz na myśli, po prostu zapytania? – Webnet

1

Moja wiedza na temat tego obszaru jest dość ograniczona, więc nie mogę podać wielu szczegółów na ten temat, ale, o ile mi wiadomo, proces tworzenia połączeń i przekazywania ich do wątku naprawdę kosztuje zasoby, więc chciałbym unikaj tego, gdybym był tobą. W każdym razie myślę, że większość tych decyzji nie może być uogólniona i zależy od biznesu.

Jeśli na przykład aplikacja komunikuje się z bazą danych w sposób ciągły i zatrzymuje się tylko po zamknięciu aplikacji, być może trwały połączenie jest możliwe, ponieważ unika się wspomnianego wcześniej procesu.

Jeśli jednak twoja aplikacja tylko sporadycznie komunikuje się z bazą danych, aby uzyskać drobne informacje, zamknięcie połączenia może być bardziej rozsądne, ponieważ nie będziesz marnował zasobów na otwarte połączenia, które nie są używane.

Istnieje również technika zwana "Pool Pooling", w której tworzy się serię połączeń a priori i utrzymuje je tam, aby inne aplikacje mogły być wykorzystywane. W takim przypadku połączenia są trwałe w bazie danych, ale nie są trwałe w aplikacjach.

Uwaga: Połączenia w MSSQL są zawsze trwałe w bazie danych, ponieważ domyślnym zachowaniem jest łączenie połączeń.

Powiązane problemy