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
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
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ń.
- 1. Którą strukturę danych powinienem tu użyć?
- 2. Którą z zewnętrznych klas Imageview powinienem użyć?
- 3. Którą bibliotekę wykresów .net powinienem użyć?
- 4. Którą wartość błędu należy użyć?
- 5. Którą instalację Pythona należy użyć?
- 6. Którą metodę hashowania hasłem należy użyć?
- 7. którego menedżera transakcji powinienem użyć (JTA vs JPA)?
- 8. Nietrwałe atrybuty modelu ActiveRecord
- 9. Kiedy chcielibyśmy uzyskać nietrwałe preferencje?
- 10. Którą strukturę danych należy użyć do geokodowania?
- 11. MySQL - Trwałe połączenie vs zestawianie połączeń
- 12. HTTP trwałe połączenie vs połączenia gniazda TCP
- 13. Którą bazę danych bazy danych w chmurze powinienem użyć w mojej aplikacji na Androida?
- 14. Char.Equals vs Object.Equals - ReSharper sugeruje, że powinienem użyć Object.Equals. Czy powinienem?
- 15. Co powinienem użyć zamiast com.google.appengine.repackaged *?
- 16. Czy MutationRecord.oldValue coś powinienem użyć?
- 17. Co powinienem użyć zamiast sscanf?
- 18. , którego z == i =: = powinienem użyć?
- 19. C# Rejestrowanie. Co powinienem użyć?
- 20. Którą ORM mam użyć zamiast Linq do Sql?
- 21. Czy powinienem używać "ścisłego" dla każdej funkcji javascript, którą piszę?
- 22. Którą implementację zestawu bitów należy użyć dla uzyskania maksymalnej wydajności?
- 23. Trwałe dane w sklearn
- 24. W Jira Agile, kiedy powinienem użyć "Historii" i kiedy powinienem użyć "Ulepszenia"
- 25. Entitymanager.flush() VS EntityManager.getTransaction(). Commit - co powinienem preferować?
- 26. Kiedy należy użyć make_heap vs. Priority Queue?
- 27. Którą metodę należy użyć do ręcznego uruchomienia mojego AngularJS?
- 28. Którą bazę danych należy użyć w pliku node.js?
- 29. Couchbase - Kiedy powinienem używać N1QL vs Widoki?
- 30. (Kiedy) powinienem użyć podpowiedzi typu w PHP?
+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
bzdura Nie wiedziałem, że ... Będę musiał się nad tym zastanowić, dzięki. – Webnet
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