p.....k
p.....k
#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.
  • Najlepsze
  • Wszystkie komentarze
c.....o
c.....o
@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.
Cilthal
Cilthal
@pierre-van-hooijdonk: wiesz, jak ci się "skończą połączenia" to leżysz, zależnie od aplikacji. Generalnie tam gdzie się da to cache/cookies/"memcache" - tak w bardzo dużym skrócie.
glowny_janusz
glowny_janusz
@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
c.....o
c.....o
@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
glowny_janusz
glowny_janusz
@co_to_sie_stanelo: ad. 2 - warto wspomnieć o tym, że powinien istnieć górny limit liczby połączeń. Wtedy mirek cierpliwie siedzi i czeka aż jakieś się zwolni.
glowny_janusz
glowny_janusz
@pierre-van-hooijdonk: A ilu równocześnie użytkowników chcesz obsługiwać?
p.....k
p.....k
@glowny_janusz: Jak najwięcej ( ͡° ͜ʖ ͡°) Nie no, chodzi mi właśnie o takie zagadnienia - co robić jak mamy duży ruch a co robić jak niszowy max. kilku na raz.
p.....k
p.....k
@co_to_sie_stanelo: Czyli np. taki mireczek jak przegląda sobie gorące to jest przydzielany "w locie" do jednego połączenia z puli, tak?
c.....o
c.....o
@glowny_janusz: przecież jest - tyle ile da radę baza ;)
glowny_janusz
glowny_janusz
@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.