Wpis z mikrobloga

#programowanie #sql
Znacie jakiś przyzwoity tutorial / materiały odnośnie zdrowo-rozsądkowej obsługi połączeń z bazą danych, DAO itp. dla początkującego?
Chodzi mi o praktyczne zagadnienia typu: czy dla każdego zalogowanego użytkownika powinienem zrobić np. jedno połączenie podczas sesji i przekazywać je między fragmentami aplikacji odpowiadającymi za odczytywanie i zapisywanie danych, czy też tworzyć oddzielnie połączenia i tego typu zagadnienia.
  • 10
  • Odpowiedz
@pierre-van-hooijdonk: Pula połączeń. Bierzesz połączenie z puli za każdym razem gdy chcesz wykonać operację na bazie, gdy skończysz -- oddajesz. Łączenie jest stosunkowo drogie. Przypisywanie połączenia do konkretnego użytkownika/sesji to chyba najgorszy scenariusz.
  • Odpowiedz
@pierre-van-hooijdonk: Jak masz niszowy to zasadniczo nie ma co sobie wtedy głowy zawracać, jeżeli biblioteka której używasz nie dostarcza Ci wbudowanej obsługi. Jeżeli masz dużą liczbę użytkowników, to zwyczajowo zestawia się pule połączeń do bazy danych. Jeżeli masz potrzebę wykonania zapytania to pobierasz z puli połączeń jedno i puszczasz nim zapytanie, jak się skończy to zwalniasz. Trzeba pamiętać o ewentualnie innym zachowaniu przy transakcjach. Zbyt duża liczba połączeń negatywnie potrafi wpływac
  • Odpowiedz
@pierre-van-hooijdonk: Zakładając, że żadne cache nie wchodzą w grę i mówimy tylko o DB, to w dużym uproszczeniu jest tak jak pisałem wyżej:

1. Mirek chce zrobić query = 'select * from goronce order by costam limit 50'
2. Kod wypoku robi conn = connection_pool.get() - dostaje istniejące połączenie, lub zupełnie nowe
3. conn.execute(query)
4. Robi co trzeba z wynikiem (renderuje stronę itd)
5. connection_pool.put(conn) - połączenie jest dostępne dla innych
  • Odpowiedz
@co_to_sie_stanelo: Lepiej zatrzymać ludzi na serwerze aplikacyjnym niż wpuścić nadmiar na serwer DB. Serwer aplikacyjny łatwiej zrestartować niż bazę po zarżnięciu nadmiarem liczby połączeń (oczywiście za tym idzie nadmiarowa liczba zapytań). Jest to jakieś zabezpieczenie, oczywiście zakładając, że zapytania są odpowiednio zoptymalizowane.
  • Odpowiedz